Xor с ключом. Тривиальное шифрование во вредоносных файлах

Привет. Это снова Алексей Маланов из «Лаборатории Касперского». В прошлый раз я рассказывал про опыт найма вирусных аналитиков , а сегодня расскажу про то, что делают вирусописатели, чтобы их работа не была замечена, и что делаем мы, чтобы их труд в итоге оказался напрасен.

Вообще говоря, злоумышленник пишет вредоносную программу, почти всегда заранее зная, что она рано или поздно попадет на «операционный стол» вирусному аналитику. И вся информация из зловреда может быть использована против автора. А чего ему скрывать? Ну, во-первых свою личность. Порой в зловредах встречаешь строки, типа C:\Users\Vasiliy Ivanov\Documents\Visual Studio 2005\заработок\trojan\Release\trojan.pdb. Во-вторых, довольно много информации, облегчающей анализ зловреда. Давайте рассмотрим некоторые приемы вирусописателей, и выясним, почему же они бесполезны.

Что скрывают:

Интернет-ссылки

Seed = seed * 1103515245 + 12345; return (seed % ((unsigned int)RAND_MAX + 1));

Показать полностью

/* * This file is part of the libpayload project. * * It was originally taken from the OpenBSD project. * * Copyright (c) 1990 The Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS"" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include static unsigned int next = 1; int rand_r(unsigned int *seed) { *seed = *seed * 1103515245 + 12345; return (*seed % ((unsigned int)RAND_MAX + 1)); } int rand(void) { return (rand_r(&next)); } void srand(unsigned int seed) { next = seed; }

Реально ли быстро в уме программно задетектировать этот вирус?

Теги: Добавить метки

Базовые понятия шифрования

Шифрова́ние - способ преобразования открытой информации в закрытую и обратно. Применяется для хранения важной информации в ненадёжных источниках или передачи её по незащищённым каналам связи. Согласно ГОСТ 28147-89, шифрование подразделяется на процесс зашифрования и расшифрования.

Шифр , код - совокупность алгоритмов криптографических преобразований (шифрования), отображающих множество возможных открытых данных на множество возможных зашифрованных данных, и обратных им преобразований.

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

Криптогра́фия - наука о методах обеспечения конфиденциальности (невозможности прочтения информации посторонним) и аутентичности (целостности и подлинности авторства, а также невозможности отказа от авторства) информации.

Изначально криптография изучала методы шифрования информации - обратимого преобразования открытого (исходного) текста на основе секретного алгоритма и/или ключа в шифрованный текст (шифртекст). Традиционная криптография образует раздел симметричных криптосистем, в которых зашифрование и расшифрование проводится с использованием одного и того же секретного ключа.

Криптография - одна из старейших наук, ее история насчитывает несколько тысяч лет.

Открытый (исходный) текст - данные (не обязательно текстовые), передаваемые без использования криптографии.

Шифрованный (закрытый) текст - данные, полученные после применения криптосистемы с указанным ключом.

Криптосистема - семейство обратимых преобразований открытого текста в шифрованный.

Ключ - параметр шифра, определяющий выбор конкретного преобразования данного текста. В современных шифрах алгоритм шифрования известен, и криптографическая стойкость шифра целиком определяется секретностью ключа (Принцип Керкгоффса).



Шифрование - процесс нормального применения криптографического преобразования открытого текста на основе алгоритма и ключа, в результате которого возникает шифрованный текст.

Расшифровывание - процесс нормального применения криптографического преобразования шифрованного текста в открытый.

Дешифрование (дешифровка) - процесс извлечения открытого текста без знания криптографического ключа на основе известного шифрованного. Термин дешифрование обычно применяют по отношению к процессу криптоанализа шифротекста (криптоанализ сам по себе, вообще говоря, может заключаться и в анализе шифросистемы, а не только зашифрованного ею открытого сообщения).

Криптоанализ - наука, изучающая математические методы нарушения конфиденциальности и целостности информации.

Криптографическая атака - попытка криптоаналитика вызвать отклонения в атакуемой защищенной системе обмена информацией. Успешную криптографическую атаку называют взлом или вскрытие .

Криптографическая стойкость - способность криптографического алгоритма противостоять криптоанализу.


Алгоритм XOR-шифрования

Пожалуй, самым простым и примитивным алгоритмом шифрования является XOR-шифрование. Алгоритм XOR-шифрования может быть усложнен некоторыми методами, что может позволить достичь весьма неплохих результатов. Но в базовой реализации алгоритм крайне не стоек.

Алгоритм XOR-шифрования основан на применении бинарной логической операции исключающего или. В табличном представлении функция выглядит следующим образом:

A B A xor B

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

Идея алгоритма заключается в том, что к каждому символу исходного текста и очередному символу строки пароля применяется побитовая логическая операция XOR. Результат записывается в файл.

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

Рассмотрим алгоритм XOR-шифрования более подробно:

  1. На входе получаем указатели на исходный и результирующий файлы и строку пароля (которая не должна быть пустой).
  2. Читаем очередной символ (байт) из исходного файла.
  3. Применяем операцию XOR к прочитанному байту и очередному символу пароля.
  4. Результат операции записываем в результирующий файл.
  5. Если не достигнут конец исходного файла, переходим на шаг 2.

Если пароль короче исходного файла (а в подавляющем большинстве случаев так и будет), то пароль используется циклически, т.е. после последнего символа пароля вновь переходим к первому.

Необходимо реализовать процедуру:

procedure XOR_CoDec (const SourceFile, DestFile, Password: string);

Где в качестве параметров передаются:

SourceFile – имя исходного файла.

DestFile – имя результирующего файла.

The binary operation XOR (stands for eXclusive OR) is a binary operand (as are AND, OR, etc) from Boole algebra. This operand will compare two bits and will produce one bit in return. That bit will be equal to 1 if the two compared bits were different, 0 if they were equal. Xor encryption is commonly used in several symmetric ciphers (especially AES). A symetric cipher is simply a cipher in which the key is used for encryption and decryption process. The XOR operand is so applied to each bit between the text you want to encrypt and the key you"ll choose. Examples are better than words, let"s take the word "xor". We want to encrypt it with the key "cle". First we have to convert the input and the key in binary representation:

Then we compare each bit with the XOR operand. Which will give you this:

Xor: 01111000 01101111 01110010
cle: 01100011 01101100 01100101
00011011 00000011 00010111

If we wanted to go back to the original input ("xor"), we would just have to reapply the XOR between the output and the key. You can note that XOR is a commutative function, as multiplications. Now what do we do if the key is smaller than the input ? This is the case in most situations. If the key was the same length than the input, it wouldn"t be interesting because you would also have to communicate the key to the person you want reading the input. In contrast, when the key and the input have the same length, it is impossible for someone to crack the cipher. So, when the key is smaller than the input, you just reapply it until you reach the end of input. If by instance I wanted to encrypt the word "bonjour" with my key "cle", I would do it this way:

Bonjour: 01100010 01101111 01101110 01101010 01101111 01110101 01110010
cleclec: 01100011 01101100 01100101 01100011 01101100 01100101 01100011

You can see that we simply repeat the key. The smaller you key, the easiest it will be to crack your cipher (obviously). The XOR cracking often are based on frequency analysis. But for that matter, I suggest you to do some researches.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: