книги хакеры / журнал хакер / 105_Optimized
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
E |
|
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
|||
>> unixoidto BUY |
|
|
|||||||
|
|
|
|
|
|||||
w Click |
|
|
|
|
|
m |
|||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
|
Тыбылучшевсвоемпровай- |
|
деребылтакуверен!Сейчася |
|
такбэкдорамитебянашпигую |
Ужвсвоейсистемеяуверен |
—свободногоместанахарде |
—отменяникакойтрафикне |
неостанется! |
спрячешь. |
|
Порядок установки TCP соединения
узел A ------- |
SYN(ISN) ------------- |
> узел B |
узел A <----- |
SYN(ISN+1) / ACK --- |
узел B |
узел A ------- |
ACK ------------------- |
> узел B |
|
|
|
|
|
|
представляют собой разновидность обычных скрытых каналов (Covert Channels), однако, в отличие от последних, не только не устанавливают своих соединений, но и вообще не генерируют никакого собственного трафика! Передача информации осуществляется исключительно путем модификации пакетов, пролетающих мимо атакованного узла.
Соль в том, что эти пакеты не направляются к хакеру, а шуруют своими путями на различные узлы интернета, например www.google.com, за счет чего достигается высочайшая степень анонимности.
Естественно, возникает резонный вопрос: как хакер сможет добраться до содержимого пакетов, идущих мимо него? Для этого необходимо подломать один из промежуточных маршрутизаторов (как правило, принадлежащих провайдеру, обслуживающему атакуемую организацию) и установить на него специальный модуль, анализирующий заголовки TCP / IP-пакетов на предмет наличия скрытой информации или ее внедрения.
Таким образом, хакер организует двухсторонний секретный пассивный канал связи с узлом-жертвой, не только засекретив факт передачи левой информации, но еще и надежно замаскировав свой IP, который может определить только администратор взломанного маршрутизатора, но никак не владелец узла-жертвы!
Рассмотрим схему взаимодействия с целевым узлом (жертвой) по скрытому пассивному каналу. Хакер (обозначенный буквой Х) каким то не относящимся к обсуждаемой теме образом забрасывает на целевой узел (обозначенный буквой A) shell-код, захватывающий управление и устанавливающий back-door вместе со специальным модулем, обеспечивающим функционирование PCC канала. Теперь все TCP / IP-пакеты, отправляемые жертвой во внешний мир, содержат незначительные
изменения, кодирующие, например, пароли или другую конфиденциальную информацию.
Часть этих пакетов проходит через внешний маршрутизатор B, заблаговременно взломанный хакером, внедрившим в него PCC-модуль. PCC-модуль анализирует заголовки всех TCP / IP-пакетов на предмет скрытого содержимого, после чего декодирует его и отправляет хакеру по открытому каналу. Передача данных от хакера к жертве осуществляется по аналогичной схеме. PCC-модуль, установленный на маршрутизаторе, выявляет пакеты, направленные на целевой IP-адрес, и модифицирует их заголовки в соответствии с выбранным принципом кодирования информации.
Таким образом, мы получаем защищенный канал A-B и открытый B-X, однако хакеру ничего не стоит общаться с узлом B через анонимный proxy серверилидажевыстроитьцепочкуизнесколькихзащищенных хостов.К тому жевыбормаршрутизатораBнеобязателен.Главное,чтобы маршрутизаторрасполагалсямеждуцелевымузломА иоднимизузлов,с которымиобщаетсяжертва.
ВовластипротоколаIP
ВозьмемпротоколIPипопробуемсоздатьнаегоосновескрытыйпассивныйканал.Средимножестваполезныхибесполезныхполейзаголовка нашевниманиепривлекает16 битовоеполеIdentification(смотририсунок «ФорматзаголовкаIP-пакета»),генерируемоеоперационнойсистемой случайнымобразомииспользуемоедляидентификациидейтаграммы вслучаееефрагментации.Узел-получательгруппируетфрагментыс одинаковымиIP-адресамиисточника / назначения,типомпротоколаи, разумеется,идентификатором.
xàêåð 09 / 105 / 07 |
109 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
E |
|
|
||||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
||||
w Click |
to BUY |
|
>> unixoid |
|||||||
|
|
|
|
|
|
m |
||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
||||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
|||||
|
|
|
|
|
|
||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
g |
|
|
||
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
|
-x cha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Схема взаимодействия с целевым узлом (жертвой) по скрытому пассивному каналу
Строгихправил,определяющихполитикугенерацииидентификатора, вRFCнет.Одниоперационныесистемыиспользуютдляэтоготаймер, другиевычисляютидентификаторнаосновеTCP-пакетов,чтобыпри повторнойпередачеTCP сегментаIP-пакетиспользовалтот жесамый
идентификатор,однакодажееслиидентификаторокажетсяиным,ничего ужасногонепроизойдет.Нуподумаешь,чуть чутьупадетскорость. Фишкавтом,чтоPCC-модульможетбеспрепятственномодифицировать полеидентификаторапосвоемувкусу,передаваяскаждымIP-пакетом 16битполезныхданных.Этовтеории.На практике женампотребуется выделитьнесколькобитдлямаркировкисвоихпакетов,иначеPCC-при- емникнизачтонесможетотличитьихотостальных.Пустьв12младших битахпередаютсяполезныеданные,авчетырехстарших—ихконтроль- наясумма.ТогдаPCC-приемникуостанетсявсеголишьвзять12бит, рассчитатьихCRCисравнитьсоставшимисячетырьмябитами.Еслиони совпадут,тоэтонашпакет,если женет—пускайидетсебелесом.
Такжеследуетпозаботитьсяонумерациипакетов,посколькупорядоксле- дованияIP-пакетоввобщемслучаенесовпадаетспорядкомихотправки. А дляэтоготакжетребуютсябиты,врезультатечегореальнаяинформаци-
Формат TCP-заголовка
0 4 8 16 19 24 32
---------------------------------------------------------------------------------------------
| Source Port | Destination Port |
---------------------------------------------------------------------------------------------
| Sequence Number |
---------------------------------------------------------------------------------------------
| Acknowledgment Number |
---------------------------------------------------------------------------------------------
| HLEN | Reserved | Code Bits | Window |
---------------------------------------------------------------------------------------------
| Checksum | Urgent Pointer |
---------------------------------------------------------------------------------------------
| Options | Padding |
---------------------------------------------------------------------------------------------
| Data |
---------------------------------------------------------------------------------------------
оннаяемкостьIP-заголовкастремитсякодномубайту,что,вобщем то,не такужиплохо.Для передачинебольшихобъемовданных(типапаролей) вполнесойдет.Главное—незабыватьотом,чтоидентификатордолжен: а) бытьуникальным; б) выглядетьслучайным.Поэтомунеобходимоприбегнутькскремблированию,тоестькналожениюнапередаваемыйтекст некоторойпсевдослучайнойпоследовательностиданных(известнойкак PCC-отправителю,такиPCC-получателю)черезоператорXOR.
Формат заголовка IP-пакета
Кромеидентификатора,можно(снекоторойосторожностью)менятьполя TTL(TimeToLive—максимальноевремяжизнипакета),типсервиса(TOS) ипротокола(protocol).Однакоэтослишкомзаметноилегкообнаруживаетсяпросмотромдампов,полученныхлюбымснифером.
Нашизвозчик—протоколTCP
ПриустановкеTCP соединенияпередающаясторона(узелA)устанавливаетфлагSYNивыбираетпроизвольный32 битныйномерпоследовательности(SequenceNumber,илисокращенноSEQ).Еслипринимающая сторона(узелB)согласнапринятьузелА всвоиобъятия,онаотправляет емупакетсустановленнымфлагомACKиномеромподтверждения
(AcknowledgmentNumber),равнымSEQ+1,атакжегенерируетсвойсоб-
ственныйномерпоследовательности,выбираемыйслучайнымиобразом. УзелA,получивподтверждение,поступаетаналогичнымобразом,что нагляднодемонстрируетследующаясхема:
ISN—этоначальныйномерпоследовательности(InitialSequence Number),уникальныйдлякаждогоTCP / IP соединения.С моментаустановкисоединенияномерапоследовательностипланомерноувеличи-
ваютсянаколичествопринятых / отправленныхбайт.Впрочем,небудем углублятьсявтеорию.Остановимсянатомфакте,что32 битноеполеISN можноизменятьпсевдослучайнымобразом,«промодулированным» секретнымиданнымии…никтоничегонезаметит!Конечно,пропускная способностьупадетдочетырехбайтнакаждоеTCP соединение,уста- навливаемоеузлом-жертвой,аTCP соединенийустанавливаетсянетак ужимного(особенноеслимыимеемделонеснагруженнымсервером,а срабочейстанцией).Тем неменеедляперекачкипаролейиудаленного управлениячерезкоманднуюстрокудажетакойскромнойпропускной способностивполнедостаточно.
ЖаннаРутковская,решивнеограничиватьсебялабораторнымиопытами, разработалапротоколNUSHU,создающийскрытыепассивныеканалы посредствоммодификацииISNспоследующимшифрованиемпоследне- гоалгоритмомDESнаосновеидентификатораIP-пакета(IP.id),порта-ис-
точника(TCP.sport)иIP-адресаназначения(IP.daddr).
Сеанспрактическоймагии
ИдемнасайтЖанныРутковской—invisiblethings.org,видимразделсинстру-
ментамиtools,находимвнем«NUSHU—passivecovertchannelengineforLinux 2.4kernels»икачаемархивисходныхтекстов—invisiblethings.org/ tools/nushu/n ushu.tar.gz(всего18Кб).Распаковываем,компилируем.Компиляцияосуществляетсястандартно.Простозапускаемутилитуmakeиполучаемтримодуляядра: nushu_receiver.o(приемник),nushu_sender.o(передатчик)иnushu_hider.o.
Приемникустанавливаетсянаполоманныймаршрутизатор,передатчик
—нацелевойузелжертвы.Для организациидвухстороннейсвязиприемникипередатчикустанавливаютсянаобаузла.Модульnushu_hider.o ворганизациискрытогоканаланеучаствуетипредназначендляобмана штатныханализаторов(типаtcpdump),непозволяя им обнаруживать факт изменения ISN.
110 |
xàêåð 09 / 105 / 07 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
E |
|
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
|||
>> unixoidto BUY |
|
|
|||||||
|
|
|
|
|
|||||
w Click |
|
|
|
|
|
m |
|||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Механизм шифрования ISN в протоколе NUSHU
Из readme следует, что модуль-передатчик обрабатывает следующие параметры командной строки:
dev=<device>, где device — сетевое устройство, с которым предполагается работать (например, eth0);
cipher=[0|1], где 0 означает передачу без шифрования, а 1 предписывает использование DES;
key=”string”, где string — произвольная строка-маркер, идентичная строке-маркеру, установленной на модуле-приемнике (используется только в том случае, если шифрование выключено, иначе игнорируется); src_ip=<ip_where_nushu_sender_is_placed> — IP-адрес узла, на котором установлен передатчик.
Модуль-приемник, помимо описанных выше ключей dev, cipher и key, обрабатывает аргумент exclude_ip=<172.16.*.*>, задающий список неприкосновенных IP-адресов, при отправке пакетов на которые протокол NUSHU задействован не будет, поскольку ISN останется неизменным (этот параметр является опциональным).
Модуль nushu_hider.o загружается без каких либо параметров и только в том случае, если в этом возникает необходимость.
Хорошо,всемодулиуспешнозагружены,ядрофункционируетнормально ивпанику,судяповсему,впадатьнесобирается.Что делатьдальше?
А ничего!Ведьэтотолькодвижок,обеспечивающийфункционирование PCC каналов.К немуможноприкрутитькейлоггерилиудаленныйshell,но этоужепридетсяделатьсамостоятельно.А как?!Ни readme,нисопроводительныепрезентациинедаютответанаэтотвопрос,поэтомуприходится зарыватьсявисходныетекстыиразбиратьихнаотдельныебайты. Начнем с передатчика, реализованного в файле sender.c. В процедуре init_module(), отвечающей за инициализацию модуля, сразу же бросаются в глаза следующие строки:
struct proc_dir_entry *proc_de = proc_mkdir ("nushu", NULL);
create_proc_read_entry ("info», 0, proc_de, cc_read_ proc_info, NULL);
struct proc_dir_entry * wpde = create_proc_entry ("message_to_send", 0, proc_de);
Все ясно! Модуль использует псевдофайловую систему / proc, создавая директорию nushu, а в ней — два файла: info и message_to_send, с которыми можно работать с прикладного уровня как с обычными устройствами (если быть точнее, псевдоустройствами).
Аналогичным образом обстоят дела и с приемником, реализованным в файле receiver.c, ключевой фрагмент которого приведен ниже:
struct proc_dir_entry *proc_de = proc_mkdir ("nushu", NULL);
xàêåð 09 / 105 / 07
Полезные
ссылки
•DEVCC—законченнаяреализациямодуляPCC каналов,использую щаявкачестветранспортногосредстваопцииштампавременивTCPзаголовках,спроектированнаядляработысядрамиLinux’аверсии2.4.9
иливыше:www.mit.edu / ~gif / covert-channel / src.
•CraigH. Rowland«CovertChannelsintheTCP / IPProtocolSuite»—ста тья,посвященнаявопросампроектирования,реализацииивыявления скрытыхпассивныхканалов,скучейдемонстрационныхпримеровна Си:www.firstmonday.dk / issues / issue2_5 / rowland.
•AndrewHintz«CovertChannelsinTCPandIPHeaders»—основные тезисыпрезентации,рассматривающейдоступныеспособы органи зации PCC каналов и методы их обнаружения, а также затрагиваю щей вопросы пропускной способности и устойчивости PCC каналов к различным proxy серверам, маршрутизаторам и брандмауэрам: guh.nu / projects / cc / covertchan.ppt.
•JoannaRutkowska«LinuxKernelBackdoorsAndTheirDetection»—
презентацияЖанныРутковской,рассказывающаяометодахсокрытия иобнаруженияrootkit’ов,использующихPCC каналы:invisiblethings. org / papers / ITUnderground2004_Linux_kernel_backdoors.ppt.
•JoannaRutkowska«PassiveCovertChannelsImplementationinLinux Kernel»—ещеоднашикарнаяпрезентацияЖанны,буквальнонашпи гованнаятехническимиподробностямипоорганизациисетевогостека Linux’аитехникеперехватачужихпакетовсмодификациейихзаголовков: invisiblethings.org / papers / joanna-passive_covert_channels-CCC04.ppt.
•JoannaRutkowska«TheImplementationofPassiveCovertChannelsinLinux Kernel»—доклад,детальноописывающиймеханизмысозданияPCC ка налов:invisiblethings.org / papers / passive-covert-channels-linux.pdf.
create_proc_read_entry ("message_received", 0, proc_ de, cc_read_proc_message, NULL); create_proc_read_entry ("info", 0, proc_de, cc_read_ proc_info, NULL);
Как видно, вместо устройства message_to_send на этот раз создается message_received, из которого можно читать получаемые сообщения через стандартные функции ввода / вывода. В общем, имея на руках исходные тексты, со всеми этими причиндалами совсем несложно разобраться, тем более что их суммарный объем составляет всего 69 Кб.
Заключение
Помимо описанных существуют и другие транспортные средства, пригодные для передачи скрытого трафика, например опция штампа времени в TCP-заголовке. HTTP-протокол дает еще большие возможности, поскольку включает в себя множество факультативных полей, которые можно безболезненно модифицировать в весьма широких пределах. Однако все это слишком заметно, и наиболее стойким к обнаружению на сегодняшний день остается протокол NUSHU, работающий с ISN. Может ли атакованный администратор обнаружить скрытые пассивные каналы хотя бы теоретически? Скрупулезный анализ сетевого трафика позволяет выявить некоторую ненормальность распределения ISN, но для этого требуется обработать сотни тысяч «хакнутых» пакетов, сравнивая их с оригиналами. П потому намного проще выявить посторонний ядерный модуль, отвечающий за создание и поддержку PCC каналов, используя общие методики верификации целостности системы. Однако это уже совсем другой разговор, к которому мы еще вернемся. z
111