The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Безопасность" / Оглавление документа
<- ^ -> [Contents]
Предыдущий: 3.2 Модификация mount Выше: 3. Реализация файловой системы Следующий: 4. Заключение

3.3 Модификация файловой системы ext2

Файл, в котором располагается обработка списка опций, а также реализация механизма проверки пароля и повторного шифрования суперблока, называется super.c и располагается в директории linux-2.0.36/fs/ext2_crypt/. Обработка списка опций осуществляется функцией parse_options(...), а механизм проверки пароля реализован в функции ext2_crypt_read_super(...) и выглядит, как приведено ниже:

	/*
	 * Cheking the password...
	 */

	if(es->s_magic == EXT2_CRYPT_SUPER_MAGIC){
     !	  crypt_super = (char*) &(es->s_second_magic);
     !      for(k = 0; k < sizeof(__u32); k++)
     !	    *(crypt_super++) ^= password_key;
	  
	  if(es->s_second_magic != EXT2_CRYPT_SUPER_MAGIC){
	    tty_write_message(current->tty,"\nPassword incorrect\n\r");
	    goto failed_mount;
	  }
	}
	else{
	  crypt_super = (char*) es;
	  for(k = 0; k < (SUPERBLOCK_SIZE-4); k++)
	    *(crypt_super++) ^= password_key;
	  
	  if(es->s_magic != EXT2_CRYPT_SUPER_MAGIC){
	    tty_write_message(current->tty,"\nPassword incorrect\n\r");
	    goto failed_mount;
	  }
	}

Строчки, помеченные восклицательными знаками, есть ничто иное, как алгоритм шифрования, используемый для защиты абсолютно всех защищенных в данной реализации элементов системы. Очевидно, он слишком прост, и имеет место тот факт, что алгоритмы зашифровывания и расшифровывания совпадают. Однако, данный алгоритм можно очень легко и безболезненно заменить на любой другой более сложный, и мало того, для еще большего повышения надежности, можно использовать разные алгоритмы для шифрования разных элементов системы.

Что касается повторного шифрования суперблока, то оно осуществляется в функции ext2_crypt_put_super(...), так как именно эта функция вызывается в момент отмонтирования системы.

Также, необходимо сказать о механизмах защиты информации в файлах. Данные механизмы располагаются в той же директории в файле file.c и осуществляются следующими функциями:

int ext2_crypt_file_read(struct inode * inode, 
	struct file * filp, char * buf, int count)
{

  int read,i;
  char ch;

  read = generic_file_read(inode, filp, buf, count);

  for(i = 0; i < read; i++) {
    ch = get_user(buf);
    ch ^= inode->i_sb->u.ext2_crypt_sb.password;
    put_user(ch,buf++);
  }
  return read;
}

static int ext2_crypt_file_write (struct inode * inode, struct file * filp,
                            const char * buf, int count)
{
  int i;
  char ch;
  for(i = 0; i < count; i++) {
    ch = get_user(buf);
    ch ^= inode->i_sb->u.ext2_crypt_sb.password;
    put_user(ch,buf++);
  }
  buf -= count;

  return ext2_file_write(inode,filp,buf,count);

}

И, наконец, о шифровании имен файлов. Реализация шифрования данных элементов системы находится в той же директории в файле namei.c. Ниже приводится уже описанный, но несколько адаптированный для этого случая, алгоритм шифрования, который в такой модификации осуществляет шифрование имен файлов:

         /*		
	  * Crypting the name ...
	  */
	 crypt_name = name;
	 while(*crypt_name != '\0'){
	 *(crypt_name++) ^= 
	    dir->i_sb->u.ext2_crypt_sb.password;
	 }






Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру