Pull to refresh

Comments 187

задача крайне специфична. сходу ассиметричное шифрование и компрометиривание системы чтобы трафик шёл от неё. сокрытие трафика если он большой тоже не просто. обычно задача то обратная стоит ;) чтобы удостовериться что траффик именно от того кого надо.
Именно асимметричное шифрование и собственно только оно.
Я не понимаю, зачем так акцентированно описывать постановку задачи, которая
в теоретической криптографии давно решена.
На передающей стороне только открытый ключ получателя — всё что передается
невозможно прочесть без знания закрытого ключа (он только на приемной стороне).
Так реализованы схемы депонирования почтовых сообщений силовым ведомствам и
корпоративным службам безопасности.
Вы невнимательно прочитали пост. Ассимитричное шифрование легко обходится, т.к. известен не только трафик, но и код троянов по обе стороны, а следовательно, и ключи по обе стороны.

Ассиметричная система работает только когда нет доступа к секретному ключу. В задаче он есть.
Про код второй стороны не вижу ничего ;-)
ну написано же что код трояна известен, очевидно обе стороны. ms-rem был достаточно умен, чтобы не постить залепы. Естественно все звень тря доступны, иначе проблемы бы неы было
В том-то и дело, что не очевидно.
Нет, еще раз внимательно прочитал Ваш пост — в постановке задачи не сформулирована угроза раскрытия удаленной стороны, только передающей и трафика — проверьте сами.

О новом уточненном Вами варианте — конечно нужно думать…
Расшифровка данных по задаче не приоритет, важна недоказуемость обмена сомнительными данными.

Мой вариант DNS-инкапсуляция. Или данные можно замаскировать под днс-запросы. На удаленном сервере поднять dns. А запрашивать можно что-то вроде этого c324f43.evilhost.com где c324f43 код запроса. Другое дело, что изначально нужно прописать всё в коде трояна.

Также можно использовать протоколы синхронизации времени.
Да, вот только код трояна известен. Следовательно, известна и фича с DNS-инкапсуляцией.
Где написано, что код известен? В статье, кстати, есть ссылка на crackme ms-rem'а которые не взломали)
Более того, неизвестно висит ли он на каком-то одном порте
UFO just landed and posted this here
Я тоже так думаю.

А если так:
Если нельзя будет доказать, что это трафик моего трояна. Даже зная порты.

Если думать в сторону сокрытия механизма перебора портов, с которых софт шлет трафик, и подделаться браузером или че м то иным, команды прятать в HTTP-протоколе, стеганографировать например изображениях и т.д., их же еще и шифровать?

Тогда будет видно что-кто то что-то странное слал, но нужно доказать что это мой троян. Что скажете?
я вот на предыдущем коменте тоже подумал про стенографирование, и тоже про http =)
Скорее всего не стенографирование, а стеГАнографирование.
UFO just landed and posted this here
Не, это не вариант, слишком много будет запросов, либо слишком длинная строка хэша. Подозрительно как-то.
>>что трафик шел [с нестандартного порта]
прокомментируйте мысль
UFO just landed and posted this here
Вспоминается статья о квантовом шифровании. Проще говоря, о том, что наблюдение за траффиком будет искажать информацию. Тем самым мы видим, что какая-то информация идет, но т.к. она исказится, как только мы ее увидим, то доказать причастность трояна к этой информации не представляется возможным.
Как обычно, косноязычен донельзя. :(
Но тогда полезная работа вашего трояна будет равна нулю. Ведь траффик наблюдается всё время, раз в задаче сказано, что весь траффик есть.
Логично. Это как колесо в вакууме — будет крутиться бесконечно, если однократно придать ему импульс, но толку абсолютно ноль, т.к. при малейшей попытке поехать возникнет трение и все остановится.
На ум приходит стеганография в tcp/ip-пакетах. И надстройка над сетевыми протоколами для сокрытия факта сокрытия данных в пакетах.
А сам факт сокрытия факта сокрытия данных в пакетах не хотите скрыть?
Чтобы понять, что такое рекурсия, нужно понять, что такое рекурсия.
можно стеганографировать в заголовках броадкаст пакетов. но имея тело/исходник «трояна» можно понять что к чему
Ладно, я раскрою секрет. Возможно меня убъют. Но вы знаете за что я пострадал.

Делаем N, нет мало. M сайтов. Делаем так, что они выходят по определенным запросам в гугле.

Троян будет делать эти запросы и переходить по найденным сайтам, манипулируя контекстом браузера.

Все как бы идет открыто, но определить какие запросы идут от пользователей, а какие от трояна — не реально.

P.S. Я вижу чьи-то глаза за окном.
P.P.S. Я на пятом этаже.
P.P.P.S. Проща
у нас есть исходник трояна, по нему можно понять алгоритм выбора запросов
не исходник, а бинарник: )
Который теоретически можно распотрошить. :)
Вы идете в правильном направлении, подбираясь к сути задачи. Перехват трафика лишь часть проблемы, небольшая ее часть.
При обнаружении трояна вам необходимо сделать так, что даже имея в наличии его код...
И что? :)
Например, троянец пишет в популярную ветку rutracker сообщение: «Спасибо.»
И при необходимости передать сообщение, меняет свой аватар на содержащий зашифрованное сообщение, но незначительно отличающегося от основного. Блок приемки, эмулируя обычного пользователя, закачивает эту страницу. После чего парсит картинку и получает сообщение. Т.о. если сообщений будет не много, то найти БП невозможно.
Гораздо сложнее таким образом создать блок управления. Точнее невозможно, если нам реально возможно мгновенно обрабатывать весь трафик.
Можно вообще не отличающийся — стеганография работает и здесь.
Стенография тут не поможет. По логам трафика можно отследить, кто закачивал эту картинку на сервер и соответственно выйти на блок управления…
можно из кэша гугла брать, это не принципиально.

Принципиально, как мне кажется, алгоритм передачи значимой информации (а не бита — «Спасибо»). Как вы пароль передадите в индекс гугла? Если исходный код трояна открыт?
Имея код трояна, мы запросто получаем этот алгоритм.
Алгоритм даст выборку из пары тысяч ip адресов с которых могли посмотреть эту картинку…
А чем трафик трояна отличается от любого другого?
Ну вот взял троян и открыл ya.ru, как мы по логам докажем что это был троян а не браузер?

Задача решается не сокрытием трафика, а генерацией невинного трафика.
Вы правы — ничем. Есть два контекста решения — теоретическое и практическое. Теоретически решить задачу нельзя наверно. Давайте попробуем практически.

Давайте говорить о трафике «некой программы», троян я привел для примера.

> Ну вот взял троян и открыл ya.ru, как мы по логам докажем что это был троян а не браузер?

В логах будет написано только с какого компа, с какого порта ушел запрос. Дальше идем на этот комп. И вот тут-то надо доказать что это наш экзешник натворил это. Троян может подмять под себя всю операционную систему если понадобится, перехватить все что только можно. Вот что я имел ввиду, на мой взгляд в этом заключается задача. Поправьте меня.
Ну допустим, мы можем создать невинный траффик. Но как мы донесем его до нашей машины? Нужно учитывать же, что информация должна попасть не на ya.ru, а на машину хакера.
А что если применить высший пилотаж — троян будет саморазвиваться, заражая разными способами другие компьютеры. Далее, куски трояна объединяются в прокси-цепочки, и трафик кружится по ним как по лабиринту, попутно применяя все технологии сокрытия, уже описанные выше?
Можно, но чем сложней система, тем выше вероятность ее обнаружения. Чем больше такой лабиринт, тем больше какого-то непонятного траффика будет кружиться в сети, что может скомпрометировать всю систему.
Вопрос о сокрытии как таковом не поднимался, вопрос заключается в том, чтобы нельзя было отделить мух от котлет.
Хотел написать про применение P2P-технологий в своем посте что пониже. Но по условиям задачи была лишь одна машина злоумышленника поэтому решил не добавлять =) А так да вполне себе =)
Ответ в самом тексте задачи:
Иными словами, невозможно было доказать, что ваш троян это троян, а не асечный клиент.

: )
Смена статуса аськи в качестве морзянки?
Клик по контекстному объявлению в яндексе?
Выше был пример с ICMP

Тут конечно не развернешься, но в задаче объем данных не оговаривается — один недоказанный байт — уже решение, по идее: )
Передача бинарного кода путем колебаний скорости передачи данных.
А если вспомнить криптономикон и эпизод с удаленным снятием сигнала с монитора можно вообще с ума сойти от открывшихся возможностей. Как вариант — мигать монитором в окно, в то время как логируют сеть: )

О! ещё вариант — твиттер!
твиттер давно используется как инструмент управления ботнетами при помощи шифрованных сообщений
UFO just landed and posted this here
А ведь мы умеем прицеплять один процесс к другому? Может стоит прицепляться процессу браузера и прям от его имени по 80 порту слать информацию?
UFO just landed and posted this here
И прямо в его пакетики и стеганографить свою информацию — нам же не мегабайты передавать, а килобайты, я надеюсь. А значит хрен докажешь, что этот трафик не от браузера идет.
Как я ни старался абстрагировать, задача все равно будет уходить корнями в системное программирование. Получится ли здесь без тонкостей низкоуровнего кодинга и архитектуры ОС, незнаю.
в качестве транспортного протокола — ICMP.
в качестве шифрования — _вставить свой любимый криптоалгоритм_.

Плюсы:
1. Таки нет открытых TCP/UDP портов, следовательно брендмауер будет молчать.
2. Зачастую работает даже с «отключенным» интернетом. То есть если хост может по ICMP добраться до хоста, то данные придут.
3. Мало кто отслеживает ICMP (чо на пинги-то глядеть ?).
4. Еще всякие вкусности ICMP протокола.
5. Я пока не видел программ которые отслеживают какая именна программа шлет ICMP.
6. Не возможность доказать, что именно отправил вирус даже имея на руках исходники оного. (можно лишь предположить, в довесок можно постоянно гонять пустые пакеты, с шифрованным текущим временем)

Минусы:
1. При наличии tcpdump таки будет вычислен факт какой-то не понятной ICMP активности.
2. Необходимость самостоятельно обеспечивать целостность передачи данных.

как-то так.
Неплохо. Что вы думаете об использовании нестандартных протоколов передачи, отличных от стека TCP/IP, вплоть до написания собственных драйверов? Если в сеть на свитчах — они должны проходить.
Что думать-то =) был опыт написания уже =) правда в мирных целях =)
Чего делиться-то?

Поверх IP протокола вместо TCP навешиваем свой. Однако, есть мысли что управляемые свитчики могут послать это все дело нафиг =)

Во вторых если речь идет таки о вирусе, то где взять права на установку драйвера? (Не все сидят под админскими акками)

В третьих драйвера отлаживать отлаживать и еще раз отлаживать. Винда она девочка капризная — чуть что падает в BSOD.

наш опыт разработки подобного был в 2004 году. Тогда управляемых свитчей в сети небыло и работало.
причём тут управляемые свитчи?!

свитч работает на втором уровне, ему пофиг всё что выше.
Если вы имеете ввиду, что у вас свитч L3 и занимается маршрутизацией, то опять таки, какое ему дело до тела пакета, хоть ICMP хоть IP, он всё отмаршрутизит куда надо.

На счёт того, что мало кто отслеживает ICMP вы не правы. Я имел огромный опыт в мониторинге сети из где-то 400 машин.
Я не знал, что искал, паразит был не известен, поэтому смотрел всё. И вот как раз таки ICMP резко резали глаза — кто это тут пингует?!

И ещё. Не редко бывает так, что даже на родном виндовом брандмауэре ICMP запрещён.
ICMP, либо какой-то самописный низкоуровневый протокол. Ну возможно, но как вы сами же и отметили, нет гарантии, что логи не ведутся, на еще более низком уровне.
Вообще в задаче, думаю, подразумевалось логирование всех и вся, но можно немного упростить ее, поднявшись на пару ступенек OSI.
Тогда пишем драйвер, реализующий какой-то низкоуровневый протокол с поддержкой шифрования и использования в P2P-сетях. И траффик ходит по тем путям, о которых просто никто не догадывается.
ICMP трафик может быть зарезан без существенного ущерба. Остается TCP и DNS

С помощью nstx возможно создать IP туннель внутри DNS. Протокол позволяющий достичь этого называется “NSTX” и расшифровывающийся как “NameServer Transfer Protocol”.

Провайдер выдаёт и разрешает использовать Вам сервер DNS. Представим обычный DNS запрос. Мы запрашиваем информацию на сервере имен провайдера, сервер провайдера передаёт запрос другому серверу имен, который отвечает за нужную нам зону. Последний DNS сервер, в цепочке, отправляет полученный ответ по тому же маршруту обратно.

А теперь представьте, что можно оформить IP пакеты в DNS запросы сервера имен и “сформировать” входящий трафик в нужные нам пакеты. И вот у нас уже есть все, что бы построить полноценный IP over DNS туннель. Остается только фальшивый сервер имен и клиент, но на практике это не так просто.

Максимальный размер пакета, который можно передать максимально 512 байт по протоколу UDP. Поэтому нам потребуется механизм сборщик / разборщик, который будет собирать и разбирать фрагментированные пакеты и проверять их корректность. Фальшивый DNS клиент может связываться с нашим фальшивым сервером DNS постоянно, а наш DNS сервер может только отвечать. Поэтому клиент будет ответственен за сверку и поддержание двухсторонней связи.

Впервые, я попробовал сделать это в 2004ом году. Две недели не спешно я разбирался с этим пакетом, правил исходных текст, перечитывал руководства, но в результате – я получил работающий туннель. Это невероятно.

Вообще, немного желания, времени, и вы самостоятельно можете запустить фальшивый сервер имен и клиента для создания тоннеля “IP-over-DNS”. Играйтесь. Я признаю это и не ожидаю, что каждого будут интересовать технические нюансы. Для большинства компьютер — это просто инструмент, средство достижения цели. У них есть и более интересные занятия, и другие проблемы в жизни. Но сама идея и реализация “IP-over-DNS” — это что-то невероятное.

system-administrators.info/?p=910
DNS-туннелинг так же можно запретить.
Оставить только доверенные? Остается MIM, но это муторно.
Угу, более того на разворачивание всего этого понадобится слишком дофига привелегий, и не нужных вопросов =)
>3. Мало кто отслеживает ICMP (чо на пинги-то глядеть ?).

А вот кто знает тему — еще как отслеживает. Лет 10 назад это даже было весьма изящной фишкой и новшеством.

Хотя, даже сейчас, к примеру, нортон спрашивает регулярно про свежий экзешник utorrent, разрешать/не разрешать, но при этом абсолютно пофиг на winmtr, который пингует всех подряд вдоль и поперек.
Кто знает тему тот с включенным tcpdump сидит и не под виндами ;)
Голова — лучший файервол. А ICMP был закрыт по умолчанию еще во фришном Agnitum Outpost Firewall FREE 1.0.1617 2004? год
Задачка с гуглом — решение очень интересное.
А вот как скрыть передачу данных даже в случае компрометации исходника программы-шпиона?
Для этого надо использовать стеганографические приемы над изображениями и\или музыкой (вы выкладывайте фотографии и музыку вконтакте?), правда тут надо будет еще придумать, как избежать потери данных при изменении размера, формата и проч. Но, думаю, эти проблемы в принципе решаемы.
Ключем же от стеганографического сообщения (который позволяет вообще найти факт стеганографии) должно быть некое слово (к примеру SHA1), и после каждого сообщения новый ключь, получившийся от хеширования старого этот старый ключь и затирает.
Приношу извинения, орфография хромает.
А ещё можно прошить троянчика в биос, который будет запускаться и отсылать данные ещё до загрузки ОС ;-)
А какая разница, до или после загрузки происходит отсылка? Наблюдение за сетью-то ведется совсем другим оборудованием, которое от работы этой конкретной машины не зависит. Тем подозрительней будет сетевая активность от еще не до конца загрузившейся машины.
троянчик может поменять мак адрес сетевухи, и тогда что?
И тогда обломается передача если используется управляемый свитч на доступе, и на порту стоит проверка на соответствие IP+MAC
троян может сканировать сеть в момент своей загрузки на предмет других MAC и копировать их
При вышеуказанных обстоятельствах не может.
Нужен второй троян, который будет любую белиберду генерить-шифровать-отправлять на нужный хост, а так же на тысячи других. Он и станет козлом отпущения, а наш таинственный троян один раз тихонько всё передаст и самоликвидируется.
Да, но в задаче указано условие — бинарик трояна найден.
В принципе можно распаковывать бинарник только после запуска.

Ну а насчёт задачи, конечно передача данных изменением скорости — удачное решение, так как если и трафик был перехвачен и бинарник трояна расшифрован, но в трафике нет информации о скорости передачи, отсюда неизвестная, которую фиг вычилсишь.
Хлипко как-то =) Что будет обеспечивать целостность данных?
конечно хлипко, а что обеспечивает целостность данных при передаче цифрового сигнала через диалап?
кучка протоколов.

а колебания скорости это вопрос… тонкий. Где гарантии что скорость само произвольно не опустится/поднимится до этих же частот и не «зафлудит» нафиг данные? Второе если где то порвался маршрут и сегмент «изменения» скорости потерян, каким образом будет отправлен обратный запрос на подтверждение конкретно потерянной части сигнала?
Незаметно передать информацию в существующих информационных потоках можно следующими путями:
1) добавлять временные задержки перед отправкой пакетов или подтверждений при получении;
2) изменять величины, которые генерируются случайным образом (например sequence id, source port);
3) изменять содержимое повреждённых пакетов;
4) повреждать или терять пакеты (как будто сеть работает нестабильно).

Чтобы узнав путь передачи (например путём реверс-инженеринга) нельзя было доказать факт передачи, нужно использовать ассиметричное шифрование (например RSA). Лишь получатель такого сообщения сможет расшифровать его с помощью ключа, который есть только у него, а перехватчик не сможет быть уверенным, происходят ли случайные события в сети сами по себе или кто-то их вызывает специально.
Имея на руках троя и неоспоримый факт-аксиому «Если один написал, то другой всегда сломает/поймёт», можно чётко утверждать, что скрыть невозможно.
Если на руках только трафик, то эта задача становится в разы проще.
Алгори́тм Ди́ффи — Хе́ллмана (англ. Diffie-Hellman, DH) — алгоритм, позволяющий двум сторонам получить общий секретный ключ, используя незащищенный от прослушивания, но защищённый от подмены, канал связи. Этот ключ может быть использован для шифрования дальнейшего обмена с помощью алгоритма симметричного шифрования. (из википедии)

оно?
Частично оно, а частично не оно.
Если
1) они на каждый сеанс будут генерировать новый ключ, а старые достоверно стирать
2) под термином «препарирование кода» подразумевается статическое дизассемблирование, а не отладка в реальном времени, т.е. нет доступа к оперативной памяти с хранящимися в ней ключами
теоретически — при нахождении источника трафика (троян) и полных логах — скрыть деятельность невозможно.
практически — есть ограничение по ресурсам на исследование — потрошение логики трояна и сопоставление с траффиком
Мне кажется вы не правы. Теоретически есть возможность доказать, что наш тройан МОЖЕТ отправлять информацию, но вот доказать, что но ее отправлял может быть и невозможно
смотрите какая штука — троян должен отправлять данные куда-то ВНЕ пользовательской «зоны деятельности», ЕВПОЧЯ.
т.е. имея анализ всей деятельности по сети и содействие пользователя (делаем тут допущение) — мы вычислим аномальную (для пользователя) активность.
Я несклоько выше писал, что, наколько я понимаю, мы
1) Можем прицепить наш троян к процессу браузера — это чтобы нельзя было увидеть сетевую активность от левых приложений
2) можем слать информацию по нашему уважаемому 80 порту, тогда хрен докажешь, что информация исходила от трояна, а не от браузера.
надо рассылать информацию всем, но так чтобы прочесть и воспользоваться смог только тот кому она предназначена, без использования специфических приложений.
Помните совсем недавно, свиной грипп в ICQ?
Помоему элегантный вариант решения задачи.

Т.е информация (пароли) никуда не передается, а по средствам сторонних программ становится доступной из вне, причем доступной в таком формате, что непонятно, обычный пользователь или злоумышленник обращается к ней.
Я конечно могу быть не прав, но мне кажется, что всем миром решать задачу, которая поможет только трояно писателям — это както не очень.
Да, я понимаю что задача интересная — но она явно вредоносная.
Топором с одной стороны им можно колоть дрова, а с другой чьи то головы.
Можно, я не спорю, только тут топор явно не под дрова заточенный
не беспокойтесь, ее здесь никто не сможет решить
Сам пост — решение якобы поставленной задачи. :)
Ты в ВУЗе каком-нибудь учился?

Учился, пока не выгнали меня выгнали за то, что я на универ забил по полной, и не ходил целый год. И я в общем то этому рад, так как универ это только потеря времени.
cracklab.ru/int/ms_rem.php

Как показательно. Из реально толковых людей, не способные быть офисными крысами, мало кто выдерживает тупой пожиратель времени как ВУЗ.
Да он говорил об этом. Говорил что делать там нечего. Он просто туда не ходил.
как это — «знал лично» и «по неподтвержденным данным»?
Вот так. Знал, а потом он исчез. Просто исчез. И не я один такой. Мы не были друзьями.
Троян сохраняет данные в виде rarjpeg, и шарит какую-нибудь директорию, после этого мы заходи через проводник на его машину, скачиваем картинку, меняем jpg на рар вводим пароль и вуаля. Ни в жизнь никто бы не допер. Естественно процесс расшаривания максимально приближаем к бытовым… типа там всякие общие фотографии опять же, которые закат, зима и что-то там еще…
Очевидно, что задача не имеет теоретически чистого решения.
Если троян будет передавать данные, то представив сферического коня в ваккууме, доказать, что это троян удастся.

Клонируем систему с подозрительной программой.
В клоне удалим подозрительную программу.

Отныне и вовеки будем полностью дублировать действия на обеих системах.
В результате, если удаление программы повлияет на снимаемый траффик, то мы поймем, что это троян.
Передаваемые данные шифровать надо в любом случае, так надежней.
Можно маскироваться под трафик от p2p клиента.
Можно использовать ICMP, насколько я помню tcpdump не логит что по нему передается, т.е. будет видно только наличие обращений:
12:21:38.636658 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
linux-2.local > ya.ru: ICMP echo request, id 8452, seq 138, length 64

«Ну пинги, ну и что?».
Я только одного не понимаю, вы говорите "… даже имея в наличии его код… нельзя было доказать, что он вообще передавал что-либо.", вы имеете в виду исходник? Если да, то задача скорее всего не решаема в принципе.
Я так понимаю, что задача ставится как «обеспечение невозможности однозначно сопоставить часть данных передаваемых по сети с пойманным троем», то есть вычленить из всего массива данных данные (шифрованные или нет, это без разницы) однозначно отправленные\принятые троянцем.
Тогда это невозможно как минимум из-за наличия среди данных хоста(хостов), к которым он будет коннектиться.
А разве skype не является частным решением задачи?
Эта зараза ухитряется найти инет в таких местах, что аж диву даешься.
Скайп один из примеров. Его писали суперпрофессионалы. Говорят его код он очень сильно защищен.
Дело-то не только в коде, насколько я знаю отфильтровать трафик скайпа не так-то просто, не говоря у же о том чтобы заглянуть в сам трафик.
Так было до покупки скайпа одной известной компанией (
Нет, не является, т.к. по условию задачи исходный код трояна должен быть открыт. А сырцы скайпа не то, что закрыты, так еще и бинарник кишит антиотладочными приемами.
Заметьте, что во-превых я сказал «частным» решением задачи, во-вторых в условиях задачи нет жесткого требования наличия исходного кода — «даже если», не тоже самое что и «обязательно имея», в-третьих получить исходники трояна, это не всегда возможно.
UFO just landed and posted this here
если в пределах одной сети можно передавать данные броадкастовыми запросами
можно использовать скрытые каналы — icmp, dns трафик
можно передавать инфу в резервных полях заголовка tcp
руткит может подменить ip-шник днс-резолва на аську например и проксироваьть через свой сервер валидный трафик, передавая и скрытый.
В былые времена троянцы сами ничего не делали и никакой трафик не генерили, а брали IE, svchost или еще какой офис за мягкое место и манипулировали. Сейчас с этим посложней, но сам принцип марионетки реализовать можно вполне невозбранно.
Тогда нужно будет доказать что троянец не передавал ничего в IE, svchost.
Задача заключается в невозможности доказательства, а не в доказывании чего-либо.
Ну да. я говорил со стороны решающего.
Коллега, ну ей-богу, что же вы? У вас есть дамп со свитча, но не дамп интракоммуникаций софта на компе. И это и есть релаьное решение. Более того, у нас нет задачи получить ответ от пункта назначения (читай UDP), соответсвенно, имеем право послать пакет даже не с нашего айпи.
UFO just landed and posted this here
а как вам такой вариант решения, допустим протокол подразумевает передачу какого-либо случайного значения. случайное значение в свою очередь генирится из данных которые нужно передать, а на принимающем хосте востанавливаются. тут по сути слабый random.
Не подходит такой вариант. Есть исходный код, т.е. механизм генерации случайного значения известен, данные тоже известны. Ваша логика в доработанном варианте — использовать открытый\закрытый ключ с каждой стороны, но встает вопрос скрытой ротации или генерации новых ключей.
в том то и дело, что алгорим генерации случайного значения не играет роли. грубый пример: я генерирую random читая выход с аудио карты, а нужная информация идёт на её вход.
Вы же сами написали что это случайное значение передается. Т.е. в логах сети есть оно и переданная информация, которая зашифрована алгоритмом, который можно вытащить из кода троя.
извиняюсь за своё костноязычие, видимо не правильно объясняю. попробую по-другому. допустим посылаю я серверу syn пакет. в
segment's sequence (32 бита) должно стоять рандомное значение. мой алгоритм псевдо-рандома предполагает получение его из потока аудио устройства. это всё, что будет в коде трояна. ничего необычного. другое дело, что предворительно в аудиопоток будут внесены нужные данные. вот, как то так.
Ладно, я тоже попробую по-другому )) Какая разница какой алгоритм рандома вы вообще используете? Если вы полученное значение отправили в сеть то оно уже есть в логах…
прекрасно, пусть оно будет в логах. только как вы отличите его от других таких же пакетов? если троян является, скажем, плагином для файерфокса. в коде вы видите только попытку установить соединение с сервером и ничего более. посылаемые пакеты тоже стандартные.
Вам же написали, алгоритм трояна известен.
на сколько я понял известен не алгоритм, а код. цитата: «если трой будет найден и весь трафик идущий по сети сохранен невозможно было доказать что он передавал какие-либо данные». разобрав код вы не найдёте никаких операций с данными, анализируя пакеты не найдёте ни каких аномалий.
Извините, я не сразу заметил что Вы из Эстонии. Предлагаю списать наше недопонимание на культурные различия наших стран.
imho, когда кончаются аргументы, переходят на личности
Никаких личностей, просто прочтите внимательно задачу. Мои аргументы Вы просто игнорируете.
итак условия:
«есть трой, он передает и принимает какие-либо данные» (т.е. пакеты в сеть он отсылает и в логах будет в любом случае)

далее:

«если трой будет найден и весь трафик идущий по сети сохранен невозможно было доказать что он передавал какие-либо данные»

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

такая задача, или?
Ладно, отвечаю Вам последний раз, а то народ начнет за флейм минусовать.
Как только Вы написали «посылаю я серверу syn пакет» Вы нарушили условие задачи: «если трой будет найден и весь трафик идущий по сети сохранен невозможно было доказать что он передавал какие-либо данные»
Про то как Ваш троян будет передавать какую-то информацию Вы вообще не написали, зато благодаря Вам, возможно, еще несколько человек узнали что с помощью звуковой карты можно генерировать случайные числа…
первым условием задачи стоит "«есть трой, он ПЕРЕДАЁТ и ПРИНИМАЕТ какие-либо данные»". второе условие «невозможно было доказать». на основании чего вы сможете доказать, что syn пакет содержит полезные данные. из кода трояны вы ничего получить не сможете. там только стандартные процедуры. просто одним словом — на каком основании?
«он передает и принимает какие-либо данные» это описание принципиального устройства, т.е. указание на то что в этом его задача. Там ничего не написано про то что он в открытом виде что-то передает в сеть.
Я думал это очевидно.
очевидно то, что уже классификация — троян, это описание принципиального устройства. а вот «передает и принимает какие-либо данные»» -условие задачи. иначе задача ставилась бы «написание трояна, который не использует сеть»
погуглите википедию, посмотрите что такое троян.
не нашёл в ничего такого, что прояснило бы ситуацию. ведь в описании не спроста фигурирует сеть и лог траффика. на мой взгляд, основная задача — маскировка пакетов с данными под системные пакеты.
Можно заставить трой писать данные на жесткий диск, можно в шифрованном виде. С компа доброумышленника забирать данные стандартными протоколами общего доступа к файлам и принтерам. После получения данные затираются. Отсюда имеем: обмен данными есть, что за данные — непонятно, трой с точки зрения сети в обмене данными не участвует.
Для сокрытия информации можно использовать для передачи информации служебные данные протоколов, подразумевающие произвольность или рандомизацию. Простые примеры: границы файлов в HTTP и словари gzip. Думаю, в низкоуровневых протоколах таких данных тоже достаточно.
Второй вопрос — сокрытие источника. Здесь может помочь выбор маршрутов передачи через подконтрольные промежуточные узлы и бродкаст.
Ещё как вариант например маскировка под программы вроде скайпа, которые общаются сами с собой на разных компьютерах и шифруют трафик.
Из условий задачи есть исходник софтины скрывающей свои данные при передаче и снимок трафика за весь период функционирования софтины. Задачу я бы решал следующим методом если трафик записан не на всем участке следования и временные затраты на расшифровку записаной сессии SSL неприемлемы.

Допустим есть браузер, который хочет зайти на https://mail.google.com/, для этого он инициирует сессию SSL\TLS
и начнет передачу данных. Все как обычно. Но, если в процессе браузера есть что-то, что может перехватить сетевые функции и на пути к mail.google.com есть MITM-сервер, то эта пара может инициировать между собой
SSL сессию, внутри которой будут передаваться данный от браузера на гугл и обратно(тоже SSL, все честно, мне не нужны эти данные), а так же некоторые данные от жертвы к серверу и обратно.

Browser<-->HOOK<=====|===~RECORDED PART~===|=====>MITM<-------->Google

На участке RECORDED PART настоящая сессия ссл до гугла отличатся от другой, перехватываемой дальше, в приниципе не будет. Сертификат гугла будет передан как сертификат внешнего SSL, использовать для создания ключа сессии можно и заранее вшитый свой. Главное внешне все идентично. И определить что сессия была обернута можно только взломом SSL.
Чуть выше идею уже описали кратко (
Есть вот такая сыренькая мысль: встроенный в асечный клиент троян. Он шлет фразы рандомные фразы вроде «Привет, как дела?» на генерируемые по специальному алгоритму номера. А информация передается за счет задержек между набором каждого символа, клиенты ведь умеют видеть набирает собеседник в данный момент сообщение или нет.

Можно и не отправлять сообщения, а скажем запрашивать статус или информацию о контакте. Информация передается, к примеру, за счет особого выбора времени когда сделать запрос. Но тогда скорость передачи информации будет очень низкой.
Время прохождения сигнала от точки к точке зависит слишком от многих факторов, почти невозможно будет высчитать интервалы, опять же, у нас есть троян, есть алгоритм его работы и при наличии логов всего траффика мы опять без проблем получаем не только доказательства его работы, но и все данные.
Вы правы. Буду думать еще, интересная задача.
Чисто теоретически, для решения задачи надо формализовать все ограничения — и начать их обходить. Имеем «найдено тело трояна». Ограничение? Ограничение. Обходим — надо, чтобы троян часть своих задач выполнял извне собственного тела. Как вариант, троян является чем-то вроде виртуальной машины и исполняет код, который при разрушении системы теряется. Маскировать свой траффик, раз уж его перехватили… Впрочем, как раз маскировку траффика в топике обсудили неплохо… И даже поднимали тему стеганографии и изменения статусов. А отсюда всего один шаг к идее — троян вообще не должен ничего делать напрямую с сетью. Достаточно делать что-нибудь с процессом, который вполне законно с сетью работает — к примеру, легонько его пинать с некоторым интервалом… Или подменять для этого процесса генератор псевдослучайных чисел, кодируя свои данные в этом самом «псевдо» — по сложности вполне сопоставимо с данной задачей, и потому в ней вполне применимо. Тогда сам троян не будет иметь никакого кода для работы с сетью — уже неплохо.
Работа с ГПСЧ — неплохая идея кстати :)
Действительно, нам ничего не мешает загружать в рамдиск основной код извне с помощью кода-бутстраппера, живущего на диске. Нашли бутстраппер, ковыряем — видим лишь вызовы скачки откуда то. Обычный такой троян-даунлодер. Нет доказательства _отправки_ данных в самом коде. Так-то.
В любой сети всегда есть трафик. Любой хост всегда отсылает какие-либо штатные пакеты. Кто мешает добавлять к пакетам, неважно каким образом, немного своей информации. Хотя бы пару бит на пакет. Таким образом, по трафику никакой лишней активности видно не будет. Для изменения пакетов необходим модифицированный драйвер сетевой карты. Ну а тут для маскировки отправителя масса возможностей. Например, троян прикидывается браузером и отсылает запрос, запрос является командой и данными для драйвера, откуда данные уже уходят в совершенно легитимных пакетах. Для получения драйвер слушает сеть в рав режиме и снифит все пакеты. Собрав полностью данные для трояна, их можно передать на более высокие уровни обработки как никогда не проходивший по сети пакет на нужный порт.

И того, для подтверждения обмена данными, нам понадобятся не только логи сети (всех пакетов), но и полные логи того что приходило драйверу сетевой карты от приложений.
а что, если вместо посылки данных, наоборот вставлять небольшую задержку в любые сессии передачи данных между двумя данными хостами. задержка может кодировать азбуку морза или бинарный код… задержка может быть непостоянная и удаленнаяч сторона может адаптировать, чтобы понять ее… есть одно узкое место — если вообще нет трафика между двумя системами, то в таком случае данные не будут передаваться…
Есть такая мысль — если трой пишется под конкретного чловека и вся эта затея напоминает кадры из сериала про джеймса бонда — зачем вам передавать что-то по сети? к примеру о затрояненом человеке известно довольно много — от ОС которую он использует до модели телефона — при подключении телефона к примеру для синхронизации троян передает информацию фоном через смс сообщение на приемник… а вы говорите ICMP, тунели, инкапсуляции…
троян к примеру может давать усиленную нагрузку на процессор/переферию — изменяя количество потребленной энергии — приемник расшифровывать эти изменения. Мне кажется нужо абстрагироваться от сети в привычном ее виде
После заражения трой генерирует пару ключей. Трой обменивается ключами с центром, замаскированной под обычный сайт, например, под фотохостинг. Ключи передаются не открытым способом, а стеганографическим. После обмена ключами троян скачивает модуль, который, как минимум, изменяет метод стеганографического кодирования в трояне. Модуль и ключи удаляются. Троян готов к работе.
Работает так — генерирует пару ключей, обменивается ключами, заключёнными в стего-контейнеры, с центром. Данные сначала шифрует ключом, а затем помещает в стего-контейнер и отправляет в центр. Через некоторое время троян обновляется и изменяет метод стеганографического кодирования.
При таком методе обмена данными, если троян будет обнаружен, можно будет идентифицировать и вскрыть только последнюю порцию данных.
ms-rem — гуру, а подобная задача решается путём размещения админки на публичных популярных сервисах и установкой псевдослучайного генератора на бота для поиска этой админки.

Примеры этого описаны тут
www.securelist.com/ru/weblog/32434/Zlovrednye_kartinki
и тут
www.us.aks.com/AircBlog/post/2009/08/Hackers-use-Twitter-to-control-botnets.aspx
+ я сам регулярно встречаю UIN'ы в асе, где к userinfo ПЕРИОДИЧЕСКИ приписываются зашифрованные команды ботам.

Итого получается, что бот по псевдослучайному рандому идёт на вполне легитимные сайты => доказать, что в момент времени t, этот сайт был посещен ботом, а не пользователем нельзя, даже если раскопать алгоритм поиска админки. Да, не все боты и не сразу, получат команду от адмики, но вероятность того бот таки найдёт свою админку не нулевая. Пример того же confiker'a aka kido
secureblog.info/articles/459.html

ms-rem_4ever!
1. Условие наличия кода приводит к необходимости вынести передающий данные код за границы трояна (или, как минимум, его незашифрованной части).

2. Условие наличия всего трафика сети приводит к необходимости не включать в сетевой трафик ключ шифрования.

предлагаю такой вариант:

1. Сделать троян «легальной» программой. Типа «нового клиента аськи» или «корпоративного мессенджера». Или очередной прогой для «вконтакта».

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

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

Тут еще важно понять, мы имеем исходник или бинарник? И бинарник какой? В начале заражения? Или на момент обнаружения?

Если бинарник на момент обнаружения — тогда у нас руки развязаны, мы модифицируем трояна так, чтобы нельзя было показать причастность его предыдущей версии к процессу инициализации всего этого дела.

Ни у еще, я не хакер, потому не знаю, можно ли, прицепившись к процессу, скажем, IE, от имени этого процесса получить начальные команды и ключ (замаскировавшись под запрос картинки или DNS), а затем модифицировать себя.
Да, важное уточнение — троян сам себя не на диск расшифровывает, а в память.
Что то мне тоже кажется что в такой постановке задача нерешаема. Если надо скрыть сам факт передачи траффика — это слишком сложно. Полный лог передаваемых данных практически не оставляет шанса. Можно только более или менее успешно маскироваться / прицепляться к другим программам.
Чтобы вычленить передаваемую информацию наблюдающий должен применить ко всем данным некий фильтр. Псевдслучайная модификация пакетов сессии с рандомным хостом значительно усложняют задачу. Трой содержит в себе только стартовые условия на первую сессию. После ее окончания получает новый механизм рандомизации и новое имя хоста.
Усложняют, но не делают невозможной.
Согласен, иначе принимающий хост не смог бы расшифровать данные. Тут противоречие — (данные не могут быть отфильтрованы\данные отфильтрованы и декодированы)
Нам не нужно вычленять саму информацию — только доказать что она передавалась. Соединения то и с новым, и со старым хостом будут записаны в логах.
Есть только соединения. Или незавершенные соединения. Несут они или не несут дополнительную информацию — не факт.
С соединением записана вся передаваемая информация — содержание (возможно зашифрованное), время и адрес/порт назначения (открытые). Подозрительные соединения можно найти уже на этом этапе.
Хм, а если трой модифицирует сам себя по какому-либо алгоритму причем предсказать что куда и как он будет передавать в следующей интерации кода можно, а что было до текущего момента — нельзя.
Такое возможно?
Тогда если для передачи данных он использует случайные коды, задержки траффика, шифрование, коннект к известным сервисам или другие теории высказанные прежде, при этом анализирует поведение пользователя (например что он читает твиттер или хабр) и соответственно туда и постит. То вы сможете предсказать куда он что-то отошлет завтра, но куда он слал вчера не сможете, а пользователь не помнит слал он что-то или нет, и вообще его помощь в условиях задачи не оговаривается.
Тогда создатель червя имея такой алгоритм будет знать все очередные шаги трояна с момента активации, и сможет извлечь стеганографированный траффик а вы сможете делать то же самое но только с момента обнаружения трояна но вам то — не доказать, что он что-то куда до слал ДО момента обнаружения. Поскольку вы не знаете по какому алгоритму он это делал вчера.
Как-то так.
UFO just landed and posted this here
Окей, есть код трояна. Троян принимает откуда-то ключ, по которому в память расшифровывает другую секцию кода. И вот она-то уже и занимается цеплянием к другим процессам, маскировкой, передачей и т.п.

Эта же секция кода может почистить бинарник, заменив в нем исходный ключ.

Ключ вводим, например, вручную ;) Или после ввода ключа модифицируем исходный бинарник трояна, чтобы даже после воссоздания полученного ключа на руках у противника был бы уже не оригинальный код.
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Мне кажеся уважаемый ms-rem имел несколько другое в виду когда задавал этот вопрос. Открытый статический код троя не даёт никакого понимания о том как он работает, ибо весь «пейлоад» будет в этом случае вынесен в закрытый код сервера м передан зашифрованным, что исключает любой анализ опосля. Либо речь шла об отладке в реальном времени либо об открытом коде сервера

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

Либо он делал упор на вопрос доказательства, ведь это это очень субьективный момент — у нас есть код, и дамп трафика. И всё равно мы никогда не сможем доказать однозначно что троян был причиной трафика. Т.е. даже если в коде есть функция отправки строки «123» на сервер 1.2.3.4 мы не можем достоверно утверждать что сообщение отправлено трояном, может троян упал в кору а такое сообщение случайно послала другая программа. Поэтому доказательства у нас будут косвенные, мерой достоверности может быть вероятность другого расклада. Также надо ставить за условие ограниченность ресурсов анализа — иначе любое шифрование вскрывается если достаточно сильно и долго брутить, любой алгоритм даже псевдослучайный за бесконечное время даст повторное срабатывание идентичное исследуемому.

Для всех задач будут общие моменты:

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

2. Нужно избежать сопоставления кода коммуникационного модуля и трафика, то есть избежать вывода о причастности программы к отправке путём анализа её кода. Т.е. если в коде есть функция send точно описывающая что надо сформировать такой-то пакет и отправить так-то, и потом именно такой паке т и по тому адресу появляется в дампе

3. Нужно избежать раскрытия информации в самом траффике, т.е. сообщения в трафике не должны пересекаться с сообщениями в программе. Пример send('jhasfgsajfhgsjagfjhsf') и потом в трафике появляется jhasfgsajfhgsjagfjhsf говорит достаточно весомо о том что это наша программа его отправила (особенно важно в случае с дебагером)

4. Сам типаж трафика должен совпадать с другими программами на ПК, т.е. глупо использовать UDP, даже недоказуемым каким-то способом, если другие программы не умеют работать с UDP — докажут методом исключения или от обратного

5. Исключение прямой коммуникации в случае если код сервера известен, иначе станет ещё задача сервер лишать зловредного функционала. Непрямая коммуникация либо не должна логироваться либо должна шифроваться

Ничего не забыл?

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

Третий пункт говорит о том что непейлоадная часть трояна не должна оперировать данными открытым текстом. Как быть в случае с дебагером непонятно

Четвёртый пункт говорит что надо шифровать коммуникацию. Самый простой способ это создания общего симетричного ключа без его передачи по сети, такие алгоритмы давно есть — каждая машина генерит случайный набор данных, и передавая друг другу его производные или составляющие генерят общий секретный ключ. Или проще — асиментричное шифрование, генерятся сесионно и не входят в код и соответсвенно пост фактум вскрываются только брутфорсом

Пример just for fun, рабтаем с http чтоб не заморачиваться с маскировкой трафа, шифрование или стеганография для передачи данных. Для недетерминистичности пробуем открытый поиск публичных сервисов (его можно сильно оптимизировать, я лишь хочу показать непредсказуемость алгоритма)

Запускается сервер, генерит открытый и закрытый ключи. В сервере зашит код функции близкой к зловредной. На всякий случай код передачи этой почти зловредной функции находится на трояне, т.е. сервер знает что передать но не знает как. Сервер отправляет в гугл случайный запрос с припиской forum, пробегается по сайтам первой десятки пока не найдёт форум открытый на запись, пишет туда «hello habrojan» и свой открытый ключ

Запускается клиент на инфицированной тачке, генерит ключи, через гугл находит тот форум (поиском по hello habrojan например) и постит свой открытый ключ туда. С этого момента вся коммуникация будет зашифрована и постфактум не раскрываема если ключи менять достаточно часто и стирать надёжно

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

Зловредный код выполняем, получаем скажем пароль, шифруем, возвращаем серверу, который его шифрует для дальнейшего использования неким известным открытым ключем для третьей стороны

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

Как улучшить схему чтобы добиться защиты от дебага и прочего окончательно?
При каждой передачи троян получает «копию» себя, передает управление и торжественно гибнет. Если троян будет найден, по его коду нельзя сказать, что он передовал какие-либо данные основываясь на трафике.
Это соответствует условию задачи.
маскироваться под скайп, шифровать и рендомно распределать траф через доступные хосты
Например передавать «Войну и мир» меняя количество пробелов. Вот и все, тоесть я что-то менял, а вот зачем? Получается стеганографическая задача.
ms-rem следит за тобой. Даю вводную — бинарный код, который расставляет эти пробелы будет открыт. Что тогда?
Лучше бы мы подумали, о том, как хорошо защитить наши машины от этого «зла», которое становятся все изощреннее и изощреннее, не без помощи «коллективного разума» и некоторого хаоса, творящегося в интернете, в котором подмешать что-то и тихонько передать очень даже можно.

Надо принципиально менять архитектуру ОС. И может даже самого компьютера (а может стоит просто покинуть города с этим бесконечным потоком суеты и бессмысленного смотрения в монитор и жить в лесу…)

Настанет время, уже даже очень скоро, когда за комп. преступления буду давать большие сроки, а в каких-нибудь восточных странах станут давать даже смертную казнь. Желающих подзаработать на этом резко поубавиться, особенно среди начинающих.

P. S. Как говорил один наш хороший преподаватель: «архитектура компьютеров IBM PC – это рожа, скроенная наспех».
Sign up to leave a comment.

Articles