книги хакеры / журнал хакер / 153_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 |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
Какзакрываютботнетыw Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
даженеобладатькакими-либоособымитехнологическиминавы- ками.Впрочем,еслиговоритьокрупныхботнетах,тоихсоздатели— это,безусловно,способные,талантливыелюди,боротьсяскоторыми довольносложно.Врамкахэтогоматериалаяхотелбырассказатьо практиках,которыеиспользуютсябольшимикомпаниямидляборьбы скиберпреступностьюи,вчастности,ботнетами.Речь,вчастности, пойдетобактивностикомпанииMicrosoft,вкоторойяиработаю.
MICROSOFTVS.БОТНЕТ
Возможно,этоизаставиткого-тоулыбнуться,новMicrosoftвпо- следниенескольколетнаблюдаетсясерьезнаяработапоповышению безопасностипродуктовисервисов.Появилисьисталиприменяться методологииразработкибезопасногокодаSDL,чтоключевымобразом повлиялонаколичествонайденныхзапоследнеевремяуязвимостей (особеннотех,которыеможноэксплуатировать).Норечьсегодняпойдетнеопревентивныхмерах,которыемогутпредотвратитьбудущие угрозы,аоборьбеспроблемами,которыеактуальнысегодня.Большое количествозараженныхмашин—какразтакаяпроблема.
Внутрикомпаниибылсозданцелыйрядподразделенийпоборьбес киберпреступлениями.Последниеносятразныеимена—DigitalCrime Unit,MicrosoftSecurityResponseCenter,MicrosoftMalwareProtection Center,TrustworthComputing,—нозадачикаждоготакилииначе пересекаютсяспроблемойкиберпреступности.ВместесправоохранительнымиорганамииисследовательскимиорганизациямиMicrosoft
началоперациипоуничтожениюкрупнейшихботнетов.Звучитгромко? Возможно,нозагодбылиуничтоженытакиеботнеты,как:
•Rustock,рассылавший80%мировогоспама.
•Coreflood,которыйслужилинструментомдляфинансовыхпреступлений,принесшихболее$100млнубытков.
•Waledac,ботыкоторогоотправляли1,5млрдспам-сообщений ежедневно.ВпроцессеегоисследованиябылонайденополмиллионапаролейотпочтовыхящиковпользователейиFTPсерверов.
БОРЬБАСБОТНЕТАМИ:ОБЩИЕПРАКТИКИ
Длятогочтобыпонятьтиповыеспособыуничтоженияботнета,надо разобратьсясегоархитектуройислабымиместами.Чащевсегодля управленияботнетомиспользуетсяодинилинесколькокомандных (частоцентральных)серверов,называемыхCommand&Control,или C&C.Онивзаимодействуютсконечнымиузламиботнетапоразным протоколам.НаиболеечастовкачествепротоколауправленияиспользуетсяIRC.Впрочем,впоследнеевремярезкоувеличилосьпри- менениеP2P-протоколовкакболееустойчивой,хотяитехнологически сложнойальтернативы.Интереснойэкзотикойвпоследнеевремя сталоиспользованиедляуправленияботнетафайлообменныхсетей ипередачауправляющихкомандвтелефотографий,публикуемыхна Facebook.Такилииначе,дляборьбысботнетомможнопредпринять несколькоконкретныхдействий:
Судебноерешениепозволилоприостановить действиедоменов,используемыхботнетом
Закрытиеботнетоврезкосократилоколичествомировогоспама
ХАКЕР 10/153/2011 |
059 |
|
|
|
|
hang |
e |
|
|
|
|
||
|
|
|
C |
|
E |
|
|
||||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|||
|
F |
|
|
|
|
|
|
|
t |
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
|
|
||||
|
|
|
|
to |
ВЗЛОМm |
||||||
w Click |
|
||||||||||
|
|
||||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
|
.c |
|||
|
|
p |
|
|
|
|
|
g |
|
|
|
|
|
|
df |
-xcha |
n |
e |
|
•ЗахватитьиливывестиизстрояС&C-узлы.
•DDoSнаС&C-узлы.
•Жалобыпровайдеру,гдехостятсяC&C-узлы.
•ЗахватDNS-имен,используемыхC&C.
•БлокированиеIPадресов.
•Арествладельцаботнета.
•Судебныйиск.
Ксожалению,невсеизэтихспособовэффективны,анекоторыеи вовсенезаконны.Междутемнекоторыеизнихнамуспешноудалось применить.Так,ботнетыRustockиCorefloodбылиуничтоженыдоволь- нотривиально.ЭтоудалосьсделатьспомощюзахватаС&C-серверов правоохранительнымиорганамипорешениюсуда.ЗатемправительствоСШАдалоправоохранительныморганамразрешениеспомощью командногоинтерфейсаботнетапослатькомандуудалениякода малварисзараженныхмашин.Работапозакрытиюдругогоботнета— Waledac—оказаласьещеболееинтересной,инаэтоммоментеяхотел быостановитьсяподробнее.
WALEDAC:УСТРОЙСТВО
СложностьборьбысWaledacзаключаласьвдецентрализованнойсхемеработыботнета.Дляегоработыбылозарезервированонимногони мало277доменныхимен.Этозначит,чтозахватыватьсерверанужно былоодновременноуразныхпровайдеровхостинга.Крометого,для управленияботнетомуспешноиспользовалсяP2P-механизм.Если посмотретьнасхемуботнета,тосразубросаетсявглазамногослойностьуправляющихсерверов.ВпроцессезаражениясистемыспомощьюWaledacзловредныйкодопределяет,какуюрольбудетвыполнятьновыйузел.Онстановитсялибопростымузлом,рассылающим спам,еслинаходитсязаNATинепринимаетвходящиесоединенияна 80йпорт,либоузлом,которыйповторяет(ретранслирует)командыиз центра,—тоестьсвоегородарепитером.Репитерыиспользуютсядля управленияботнетом.Каждыйрепитеркромепередачиуправляю- щихкомандузлам-спамерамподдерживаеттакжесписок«соседей», состоящийиз100узлов,такжевыполняющихрольретранслятора,
ккоторымонможетподключитьсяпоP2Pпротоколу.Современем любойузел-повторительрегистрируетсвоедоменноеимявfastflux DNS.Этоделаетсядлятого,чтобыдатьвозможностьобращатьсяк
МногослойнаяархитектурауправленияWaledac
|
|
|
|
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 |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
НЕТАКИЕ,КАКВСЕ
Опрометчивосчитать,чтоботнетысостояттолькоизWindows-машин. ЕстьботнетыинаLinux/Unix—Psyb0t,ChuckNorris,насчитывающиесот- нитысячустройств.Восновномтакиеботнетысоздаютсяиздомашних маршрутизаторов,коммутаторовиNASнижнегоценовогодиапазона. Уничтожитьтакойботнеткрайнетрудно,таккакдомашнийпользователь вбольшинствеслучаевнеобладаетзнаниямивLinuxинавыкамиобновленияпрошивкиустройства.Производительустройствазаинтересованв быстромустареванииустройстваичастонетольконенамеренустранять недостатки,ноинеимеетмеханизмовцентрализованногообновления своихпродуктов.Поданнымисследованияот2009года,винтернетев любоймоментможнонайтинесколькомиллионовдомашнихустройствс устаревшимипрошивкамиипаролямипоумолчанию.
Каждыйрепитерподдерживаетсписок«соседей»
ПодключениесерверовMicrosoftкWaledac
060 |
ХАКЕР 10/153/2011 |
|
|
|
|
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 |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
Какзакрываютботнетыw Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Регистрациядоменногоимени
себе узлам-спамерам, если ближайший к ним репитер вдруг выйдет из строя и станет недоступен. Таким образом узлы ботнета всегда могут найти ближайший узел-ретранслятор и получать от него команды и обновления исполняемого кода. Со временем роли узлов могут меняться. Если система, используемая как ретранслятор, к примеру, попадает в корпоративную сеть и лишается возможности принимать подключения на 80-й порт, то она автоматически получает роль спамера. При этом проанализировать топологию ботнета не так просто, потому как еще одной задачей репитера является противодействие исследованию топологии ботнета. Он служит своеобразным прокси и не позволяет узлам-спамерам знать чтолибо об управляющих узлах C&C.
WALEDAC:УНИЧТОЖЕНИЯ
Проанализировавархитектуруботнета,мыпроработалипландля атакинаботнетсоследующимиконкретнымишагами:
1.Нарушениеp2p-механизмаобменауправляющимикомандами.
2.НарушениеобменаDNS/HTTP-командами.
3.НарушениеработыдвухверхнихслоевC&C-серверов.
ПервымделомнужнобылопрерватьработуP2P-механизма.В связистем,чтофункциянахожденияближайшегоретранслятора внутриботнетаработаланестабильно,былавозможнаситуация,что узлуприходилосьперебратьдо20адресов,находящихсявегосписке «соседей»,чтобынайтиработающийсоседнийрепитер.Благодаря этомунамудалосьсоздатьподдельныерепитеры,включитьихвсоставботнетаиначатьраспространятьфальшивыеобновлениясписка репитеров,темсамымнарушивсвязностьсистемыуправленияP2P. Этопозволилопередаватькомандыузлам-спамерамотспециально созданныхкомандныхсерверовMicrosoft.
ВслучаенеработоспособностиP2P-механизмаузлыботнета начинаютискатьдругдругаспомощьюмеханизмаfastfluxDNS. Поэтомунеобходимобылоразрушитьиэтотспособуправления,чтобы злоумышленникнемогвосстановитьконтрольнадботнетом.Это интересныймомент,потомучтоздесьмыиспользовалиюридический механизм.ТипичнаяпроцедураотзываDNSименичерезICANNспо- мощьюпроцедурысострашнымназванием«UniformDomain-Name Dispute-ResolutionPolicy»можетзанятьдовольномноговремени.Это позволилобызлоумышленникамуспетьосознать,чтоихатакуют,
ипредпринятьмерыпорегистрацииновыхDNS-имен,накоторые позжеперевестиуправлениеботнетом.Поэтомувместостандартной
Стандартныйподходкуправлениюботнетом
процедурыICANNмывоспользовалисьпроцедуройTRO(temporary restrainingorder)—возможностьювременноприостанавливатьдей- ствиедоменовна28дней.Наэтомэтапеещеоднойсложностьюбыло то,чточастьDNS-именбылазарегистрировананатерриторииКитаяи Нидерландов.Поводомдлясудебногоискабылонарушениеторговой маркиMicrosoftиPfizer.БотнетактивнорассылалписьмасуведомлениямиовыигрышевнесуществующейлотерееMicrosoftирекламу поддельныхлекарствподмаркойPfizer.
ДлятогочтобызлоумышленникимоглипоборотьсясMicrosoftв суде,ежелиунихпоявитсяжеланиезаявитьсвоиправанаботнет,на сайтебылоопубликованоисковоезаявление.Такжевнациональныхгазетахнатерриториистран,откудаподозреваемыеуправляли ботнетом,былиопубликованыуведомленияовызовевсуд.Каки предполагалось,никтонепосмелявитьсявсудизаявитьосвоих правахнаботнет.ТакимобразомMicrosoftвыигралсуднатерритории США,КитаяиНидерландов.Подробнееоюридическихтонкостяхи перипетияхборьбызаботнетможнопочитатьвспециальномразделе сайтаMicrosoft(bit.ly/rlDUDA).
ВрезультатеэтихюридическихдействийправанаDNSперешли
кMicrosoft.НаданныймоментDNS-именаподключеныксерверам Microsoft.Вслучае,есликэтимсерверамподключаетсязараженный узелизботнета,нанегоподаетсякоманда,приказывающаяботу бездействовать.Ксожалению,Microsoftнеимеетправаудалить вредоносныйкодботаWaledac,поэтомумысвязываемсяспровайдерами,черезкоторыхпользовательподключенкCетиипросимих помочьпользователюизбавитьсяотвредоносногокодаспомощью бесплатныхутилит,такихкакMicrosoftSecurityEssentialиMalicious SoftwareRemovalTool.
ЗАКЛЮЧЕНИЕ
Мы надеемся таким образом постепенно очистить интернет от последних остатков ботнета Waldac. Чтобы злоумышленникам было неповадно в дальнейшем создавать ботнеты, Microsoft в сотрудничестве с правоохранительными органами продолжает расследование и сбор доказательств. С этой целью мы предложили награду в $250 000 тому, кто сообщит сведения, способствующие аресту преступной группы, стоявшей за Rustock (bit.ly/oR7x88). По нашему опыту, такой подход может сработать. В завершение хочется сказать, что Microsoft и в дальнейшем намерен активно бороться с киберпреступлениями, преследуя злоумышленников всеми доступными ему способами. z
ХАКЕР 10/153/2011 |
061 |
|
|
|
|
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 |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
|
to |
|
|
|
|
|
|
qbz (cayd@yandex.ru)w Click |
|
|
|
|
|
m |
|||||
|
|
|
|
|
|
||||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
|
-x cha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Автоматическийсборинформациисчужихсайтоввбольших объемах—задачапростаятоль- конапервыйвзгляд.Сегодняя поделюсьстобойконкретным опытомпосозданиюграбберов дляудаленныхресурсовнапримеревсемизвестныхсервисов mamba.ruиslil.ru.
LINKS
bit.ly/qV15Z8— мануалпонастройкам cURL.
bit.ly/oMBmcW—
Парсинг плагин
LiveHTTPHeadersдля
MozillaFirefox’а.
по-крупному
ДОБЫВАЕМЦЕННУЮ ИНФОРМАЦИЮСЧУЖИХСАЙТОВ
DVD
Нанашемдискеты найдешьвидео,подробноописывающее процесспарсинга сервисаslil.ru.
Такженадискмы заботливовыложили всенеобходимые скриптыипримеры.
HTML-код,который мыполучаемсоslil.ru
редположим,переднамистоитзадачапроанализировать
Пмиллионстраницодногосайтаисобратьснихкакую-то конкретнуюинформацию:выдратьссылки,телефоны,имена
итакдалее.Вродекакзатеяоченьпростаяирешаетсянесложным скриптом,которыйбудетходитьпосайту,анализироватьконтентивыдиратьоттуданужныеданные.
Однаконаделевсёнетакпросто:любыесервисынезаинтересованывтом,чтобысихсистемамиработалиботы.Никтонехочет,чтобыу неговоровалиинформацию,загружалисервераненужнымтрафиком
иполностьюигнорировалирекламу.Поэтомувсекрупныесервисы активноборютсясботами,используяразнообразныетехнологии:
• CAPTCHA;
• авторизацию(cookie,сессии);
• сертификаты;
•JavaScript-защиту;
•лимитсоединений;
•генерациюключейдоступачерезflash;
•другие,болееизощренныеспособызащиты.
Впрочем,всеиспользуемыетехнологии—этонеполноерешение проблемы,авсеголишьусложнениепроцедуры:обойтиприграббинге можноабсолютновсё.
ПРАКТИКА
Какговорится,лучшеодинразувидеть,чемсторазуслышать.Поэтому приступимкпрактическойчасти,вкотороймынапишемпростойпарсердляудобногофайлообменникаslil.ru.
Выборпалнанего,таккакникакихособыхзащитвеб-серверэтого ресурсанеставит,асамонсодержитмногоинтереснойинформации, такойкакзагруженныеаккаунты,приватныйсофтидругиеинтересности.Рассмотриминструментарий,которыймыбудемиспользоватьот началанаписанияботаидопервыхполученныхрезультатов:
•Браузер.
•PHP.
•cURL.
•ПлагинLiveHTTPHeadersдляMozillaFirefox.
062 |
ХАКЕР 10/153/2011 |
|
|
|
|
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 |
|
|
|
|
Большенамничегонепотребуется,кромеголовынаплечахиудобноготекстовогоредактора.Дляначаладавайопределимся,чтожемы будемпарсить.Парситьбудемназваниефайла,егоразмериссылкудля скачивания.ВсяэтаинформациясодержитсявHTML-сорцахстраницы скачиваниязагруженногофайла.
Теперьрассмотримспособыполучениякодатойсамойстраницы. Ихтакженесколько:
1.Стандартнаяфункцияfile_get_contents().Требуетвключенную PHP-директивуallow_url_fopen.Включитьееможночерез
.htaccess-файлнастройкисервераApache(php_flagallow_url_ fopenon).Здесьтакжеследуетупомянуть,чтовпятойверсии всемилюбимогоPHPсталовозможнымсоздаватьопределенные настройкидляHTTP-запроса.Этореализуетсяпримернотак:
$settings = array('http' => array('method' => 'GET', 'header' => "User-Agent: [ЮЗЕРАГЕНТ]\r\n".
"Accept: text/xml,application/xml,application/ xhtml+xml;q=0.5\r\n".
"Accept-Language: en-us,en;q=0.5\r\n". "Accept-Encoding: gzip,deflate\r\n". "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"));
$settings = stream_context_create($settings);
$html = file_get_contents('http://url.tld/', NULL, $settings);
2.Сокеты(fsockopen()идругиефункции,которыемырассматривать небудем).
3.cURL.
|
|
|
|
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 |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ПлагинLiveHTTPHeaders
Идеальнаявещьдляработысудаленнымисерверами.Этокак швейцарскийнождлясоставлениязапросовнасервер.Всёпродумано домелочейиобернутовинтуитивнопонятнуюсредуразработки.На курлемыиостановимся,таккактолькоонможетпредоставитьнам многопоточностьработыитребуемуюбыстроту(всреднемcURLв четыреразабыстрееfile_get_contents).
КАКСЕРВИСЫЗАЩИЩАЮТСЯОТГРАББИНГА,ИКАКЭТООБХОДЯТ
|
1 |
CAPTCHA |
|
2 |
Авторизация |
|
3 |
Сертификатыи |
|
4 |
Лимитсоединений |
|
Существуютпокрайней |
|
Оченьчастобываеттак,что |
|
JavaScript-защиты |
|
Длязащитыотграббинга |
||||
|
|
меретриспособадля |
|
|
необходимаяинформация |
|
|
Ресурс,скотороготы |
|
|
грамотныеадмини- |
|
|
|
|
|
|
|
|
обходавсемнадоевшихкартинокс |
доступнатолькодлязарегистриро- |
хочешьграбитьинфу,можетработать |
страторыставятограниченияна |
мутнымицифрами/буквами. |
ванныхпользователейопределен- |
черезSSL,ивэтомслучае,еслине- |
скоростьзакачиваниястрани- |
• Скриптнаосновенейросетии |
ногоресурса.Онаможетнаходитьсяв |
обходимыйсертификатутебяесть,не |
цыпользователем,атакжена |
другихалгоритмов.Эффектив- |
какой-либозакрытойчастисайтаили |
составляетбольшоготруданаучить |
количествосоединенийичастоту |
ностьспособаможетсильно |
жескрыватьсяподтакназываемым |
скриптиспользоватьэтотсертификат. |
активности.Понятно,чтониодин |
меняться,вслучаекачественной |
хайдомнафоруме.Такжевомногих |
ДляPHPямогупосоветоватьзаме- |
нормальныйпользовательнерабо- |
капчиэффективностьавтомати- |
случаяхдлярегистрациитебеможет |
чательнуюбиблиотекуcURL,которая |
таетссайтомнесколькочасовпод- |
ческогораспознаванияопустится |
понадобитьсяспециальноепригла- |
отличнореализуетвсезадачи,свя- |
ряд,выкачивая5000страницвчас. |
ниже5%. |
шение—инвайтотужесостоявшихся |
занныессетевымвзаимодействием. |
Поэтому,анализируяактивность |
• Сервисыручногораспознава- |
членовсайта.Толькопослепро- |
ЧтокасаетсяJavaScript-защит,то |
клиентов,умныесистемыиCMS |
ниякапчейсудобнымAPIдля |
хожденияпроцессарегистрациина |
оничащевсегоориентированына |
могутвыявлятьлевыхпользовате- |
автоматическойработы.Здесь |
ресурсетысможешьполучитьдоступ |
шифрованиеисходногокода(читай |
лейиограничиватьихработу.Вто |
картинкиразгадываютреальные |
кнужномуразделу.Даннаязащита |
статью«JavaScript:Игрывпрятки» |
жевремяадминистраторынемогут |
людивонлайн-режиме,поэтому |
непредставляетбольшойтрудности |
изпрошлогономера)илинапроверку |
действоватьвлоб:ведьпододним |
эффективностьспособаочень |
вобходе,скорее,немногозамедляет |
специальныхjs-переменных,которые |
IP-адресомвполнемогутсидеть |
высокая:до90%.Единственный |
работунашегобота,итодалеконе |
доказывают,чтостраницазагружена |
сразусотничеловек. |
минус—заиспользованиеэтих |
всегда.Еслимыхотимпроводить |
реальнымбраузером,анеботом. |
Чтожеделать,еслинамнужно |
сервисовнужноплатитьденьги. |
множестводействийнанужномсайте |
Обходятсяэтиметодыэлементарным |
заоднуминутуполучить1000 |
• ИспользованиеXSS-уязвимостей |
из-пододногоавторизованногоакка- |
анализомHTML-кодастраницы.Такой |
страниц,асервернереагируетуже |
дляподсовываниякапчейреаль- |
унта,тонамследуетсоставитьодин |
анализтылегкосможешьвыпол- |
после20-йстраницы?Использо- |
нымпользователям.Припомощи |
дополнительныйзапросксерверув |
нитьспомощьюинструментаOpera |
ватьsocks-иproxy-сервера.Вэтом |
XSSнауязвимомсервисеможно |
самомначалеработыбота.Данный |
DragonFlyв«Опере»илиплагинадля |
случаеработаботабудетпроисхо- |
разместитьспециальныйскрипт, |
запроснеобходимдляполученияав- |
«Лисы»LiveHTTPHeaders.Обеэтих |
дитьнесодногоIP-адреса,анапри- |
которыйбудетблокировать |
торизационныхкукисов.Чащевсего |
тулзыпомогуттебепонять,какиеже |
мер,со100IP-адресов.Темсамым, |
интерфейсипредлагатьпользо- |
этоименноcookie-записи,иничего |
POST-,GET-иCOOKIE-переменные |
умножив100на20,мыполучим2000 |
вателюраспознаватькапчу.Люди |
более.Послеполученияпеченекот |
твойбраузерпосылаетудаленному |
запросов,накоторыесерверточно |
сейчаснауровнерефлексагото- |
серверапоследующиезапросыбудут |
ресурсу.Затемтысможешьвставить |
долженответить. |
выктакойситуацииисудоволь- |
происходитьсихиспользованием, |
этипеременныевкодсвоегобота. |
|
ствиемраспознаютподдельные |
чеммыиобходимданнуюзащиту. |
|
|
картинки,нечуяподвоха. |
|
|
|
ХАКЕР 10/153/2011 |
063 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|||
|
F |
|
|
|
|
|
|
t |
||
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
ВЗЛОМm |
|||||
w Click |
|
|||||||||
|
|
|||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
-xcha |
n |
e |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Готовыйпарсерslil.ru
РАЗВЕДКА
Прежде чем написать первые строчки на cURL, давай проанализируем, как браузер получает страницу. Ведь нам нужно замаскироваться именно под браузер. Для этого откроем Mozilla Firefox и запустим плагин LiveHTTPHeaders. Теперь перейдем по тестовому адресу slil.ru/31402491 и посмотрим в окно плагина. Там будет много логов, из которых нас интересует только самый первый запрос.
Воткаконможетвыглядеть:
GET /31402491 HTTP/1.1
Host: slil.ru
User-Agent: [ЮЗЕРАГЕНТ]
Accept: text/xml,application/xml,application/xhtml+xml;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Еслиданныйзапросвозвращаетнужнуюнамстраницу,значит, егомыибудемиспользоватьвкачествемаскировки.
СОСТАВЛЕНИЕЗАПРОСА
Теперьдавайнапишемпростенькийскриптдляполучениястраницы сфайлообменника:
|
|
|
|
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 |
|
|
|
|
$curl = curl_init(); $head = array(
'Host: slil.ru',
'User-Agent: [ЮЗЕРАГЕНТ]',
'Accept: text/xml,application/xml,application/xhtml+xml;q=0.5',
'Accept-Language: en-us,en;q=0.5',
'Accept-Encoding: gzip,deflate',
'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7',
'Keep-Alive: 300',
'Connection: keep-alive'
);
// шапка, которую мы получили через LiveHTTPHeaders в виде массива
curl_setopt($curl, CURLOPT_URL, 'http://slil.ru/31402491'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, $head); curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
$out = curl_exec($curl); // создаем соединение curl_close($curl); // закрываем текущее соединение
Всего 17 строк кода, и мы имеем исходный код страницы slil.ru/31402491 в переменной $out. Осталось только найти нужные нам данные, с чем справится следующий скрипт:
$filedata = explode('<p align="center">', $out);
$filedata = explode('</p>', $filedata[1]);
list($filename, $filesize) = explode(' ', trim(strip_tags($filedata[0])));
$temp_link = explode('var l1nk=\'', $cResult);
$temp_link = explode('\';', $temp_link[1]);
$temp_link = trim(str_replace("'+'", '', $temp_link[0]));
$data = array('name' => $filename, 'size' => $filesize,
'link' => $temp_link);
Такимобразоммыспарсилиимя,размериссылкуфайласодной страницы.
МНОГОПОТОЧНОСТЬ
Нокакжеспарситьсразумногофайлов?НапомощьприходитмногопоточностьcURL’а.Чтобыобработатьмножествофайлов,намнужно иметькакминимуммножествоссылок.Дляудобстванапишемгенератордиапазонассылок,исходяизстартовойипоследнейссылки:
function genLinks($from, $to)
{
3СЕРВИСАДЛЯРАСПОЗНАВАНИЯКАПЧИ
Использованиеонлайн- |
1 |
«Антигейт» |
2 |
«КапчаБот» |
2 |
DeathbyCaptcha |
сервисовдляраспознавания |
|
(antigate.com)—одиниз |
|
(captchabot.com) — аналогич- |
|
(deathbycaptcha.com)—отно- |
капчиоченьпопулярновсерьезных |
самыхпервыхи,безусловно,самых |
ный, но менее популярный сервис. |
сительноновыйпроект,позицио- |
|||
проектах,частооснованныхна |
популярныхсервисов.Здесьтебе |
Точность расшифровки немного |
нирующийсебякаксамогокрутого |
|||
получениивыгодыоттогоилииного |
судовольствиемпомогутрасшиф- |
меньше (80 %), также поддержи- |
распознавателякапчнарынке.Цена |
|||
действия.Идействительно,зачем |
роватьрусскиеианглийскиекапчи |
вает многопоточность в своих |
удовольствия—1,39долл.за1000 |
|||
программиступисатьнейросетии |
форматовJPG,GIFиPNG.Ценаза |
API. Цена — 30 копеек за одно |
распознанныхкапч.Среднеевремя |
|||
сидетьбессоныминочамизакодом, |
такоеудовольствиеотносительно |
изображение, а время обработ- |
распознаваниясоставляет17секунд |
|||
когдаможнопростозаплатитьодин |
невысока—1долл.за1000изобра- |
ки — до 30 секунд. Значительный |
сточностью90%ивыше.Здесьты |
|||
зеленыйбаксзацелуютысячураз- |
жений.Качествотоженауровне—не |
плюс системы — программные |
такженайдешьцелуюкучупро- |
|||
гаданныхкапч.Давайрассмотрим |
более10%ошибок,атакжевозмож- |
примеры, позволяющие безбо- |
граммныхрешенийдляработающе- |
|||
трисамыхизвестныхипопулярных |
ностьвывестиденьгиобратно,в |
лезненно интегрировать сервис в |
гонасервисеAPI. |
|||
антикапчевыхресурса: |
случаееслитебячто-тонеустроит. |
свой проект. |
|
|
064 |
ХАКЕР 10/153/2011 |
|
|
|
|
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 |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
-крупномуw Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
$i = 0; $links = array();
for ($i = 0; $i <= ($to — $from); $i++)
{
$links[] = 'http://slil.ru/'.($from+$i);
}
return $links;
}
$links = genLinks(31402491, 31402591);
Теперьмыимеем100ссылокslil.ruот31402491до31402591ввиде массива.Теперьприступимксамоймногопоточности.Еереализация немноготруднее,нодлянаснетничеготрудного.
ВcURL’емногопоточностьработаетследующимобразом:
1.Создаемдескриптормногопоточности,вкоторыйпотомразза разомскладываемнастроенныесоединения.
2.Пробегаемсяподескрипторуфункциейcurl_multi_exec,которая какразиисполнитвсёисразу.
clickUrl=http%3A%2F%2Fmamba.ru%2Ftips%2F%3Ftip%3DLogin& target=&login_captcha=&login=xxx&password=x1x2x3& VAnketaId=0&RedirectBack=http%253A%252F%252Fmamba.
ru%252Findex.phtml%253F
АдресAPI—mamba.ru/ajax/login.phtml?XForm=Login.
СОСТАВЛЕНИЕЗАПРОСА
Теперьвсмотримсявсамзапрос.Каквидим,здесьужефигурируют сессии,этозаметнопоcookie.Такжемывидим,чтопосылаютсяданные,ипосылаютсяониметодомPOST.Всеэтидеталинужноучестьпри написаниибрутера.
Теперьсноваоткрывайдискиищинанемочереднойпримерна PHP+cURL.Наэтотразмыдолжныполучитьопределенныйответот авторизационногоAPI«Мамбы»,означающийправильностьилине- правильностьпары«логин–пароль».
Воттаквыглядитответснеправильнойпарой:
3.Дляпоследующегообходарезультатовработыиспользуемcurl_
multi_getcontent. {"t":"0000000000000","a":00000000,"s":1,"e":0,"d":[],"r":0,"XFor
Запримеромреализациитакойсхемыидемнадискизапускаем функциюparseLinks()следующимобразом:
$info = parseLinks(genLinks(31402491, 31402591));
Теперь,послетрех-четырехсекундработыскрипта,мыимееминфор- мациюо1000файлов,сохраненныхнаslil.ru,вдиапазонеот31402491до 31402591.Далееужеделофантазии.Можно,например,произвестивыборкуконкретногоформатафайлов,можноихвсескачатьксебенакомпьютерпосоответствующимссылкам,можнопроизвестипоискпофразеи такдалее.Какпоказываетпрактика,ничегосложноговэтомнет,поэтому рассмотримещеодинпример,которыйбудетуженемногосложнее.
БРУТИМ«МАМБУ»
Далеемыостановимсянабрутередлясоциальнойсети«Мамба» (www.mamba.ru).
Какобычно,давайсоставималгоритмработыбрутера:
1.Посылаемзапросслогиномипаролем.
2.Принимаемответ.
3.Сверяемполученныйответсужеподготовленнымответом«неудачнойпары»и,еслиониодинаковы,возвращаемfalse,иначевозвращаемtrue.
Теперьостановимсянемногоподробнеенасамоммеханизмеавторизации«Мамбы».Перейдянасайт,мыувидимкнопочку«Вход».Нажавна нее,тыникуданепереходишь,атакженесоздаетсяникакихновыхокон, затопосерединеэкранапоявляетсяновыйслойсформойдлявхода.Из этогоследует,чтостоитожидатьдвавариантаразвитиясобытий:либонас перекинетнакакую-тостраницупослевводаневернойпары,либожевсё этобезобразиереализованонаAjax’еспомощьювнутрисайтовогоAPI. Первыйвариантбылбытяжелеедлябрутера,таккакпришлосьбыпо- лучатьссерверамногомусораилишнегоhtml-кода,авотвторойвариант былбыидеальным,таккакмыполучаемвсеголишь100–300символовот внутрисайтовогоAPI,чемускоряемработубрутера.Кнашейрадости,на «Мамбе»используетсякакразвторойвариант—сAPI.
ДалеенамнеобходимонайтиадресэтогосамогоAPI.Искатьвhtml- иJavaScript-коде,конечно,можно,номыбудемумнееипростоснова используемзамечательныйплагиндля«Лисы»LiveHTTPHeaders.
Открывстраницу,введяпару«логин–пароль»инажавкнопку «Вход»,мыувидимвокнеплагинаадресскрипта,которыйиотвечает заправильность/неправильностьпары:
POST /ajax/login.phtml?XForm=Login HTTP/1.1
Host: mamba.ru
...
Cookie: mmbsid=b8HMuKD6KEILm9GTm5Z0eOMnBLtFy6Xp
...
ms":{"Login":{"found":"\u041d\u0435\u0432\u0435\u0440\u043d\
u043e\u0443\u043a\u0430\u0437\u0430\u043d \u043b\u043e\u0433\ u0438\u043d\u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\ u044c"}}}
Авоттаксправильной:
{"t":"0000000000000","a":"00000000","s":1,"e":0,"d":[],"r":
"http%3A%2F%2Fmamba.ru%2Ftips%2F%3Ftip%3DLogin","XForms":0}
Поэтомубудемсчитать,чтоесливответебудетприсутствовать строка"r":"http%3A%2F%2Fmamba.ru%2Ftips%2F%3Ftip%3DLogin",то параподошла.Также хочу отметить, что весь код с диска следует обернуть в многопоточный вариант, желательно в виде функции. Но не буду повторяться, так как способы реализации такой многопоточности описаны выше.
ПАЛКИВКОЛЕСАХ
Создавфункциональныйскриптипроверивоколо1000аккаунтовза минуту,тыможешьудивитьсятому,чторезультатыдалеконевсегда будуткорректными.Дляэтогосоветуютебепросто-напростовестилог работы,вкоторыйзаписываютсяответысервера.Открывтакойлог,ты увидишьподобныезаписи:
{"t":"1311437340338","a":0,"s":1,"e":0,"d":[],"r":0,"XForms":0,"
captcha":1}
Атакжезаписи,свидетельствующиеобанеIP-адреса,скоторого идетбрут.Капчаобходитсяразнымиспособами(онаиболеепопуляр- ныхизнихяужерассказалвыше),авотбанIP-адресалегкоисправить однойстрокойнаcURL:
curl_setopt($curl, CURLOPT_PROXY, '12.34.56.78:80');
Еслирассматриватьпримермногопоточногоскрипта,толучше использоватьнеодин,амногопрокси,которыебыавтоматически менялисьпослеполучениябана.
ЗАКЛЮЧЕНИЕ
Каквидноизпрактики,работасчужимисайтамисовсемнетрудна имногиедажеоченьпопулярныесервисынеочень-тоистараютсяв защитесобственныхданныхотграббинга.Если,попробовавописанныевстатьеспособыиприобретясоответствующийопыт,тыхочешь монетизироватьсвоинавыки,томогунамекнуть,чтов][-тусовке определеннымспросомвсегдапользовалисьибудутпользоваться всевозможныеавторегистраторы,спамеры,грабберы,чекерыитак далее.
Наэтомспешуоткланяться,удачногопарсинга! z
ХАКЕР 10/153/2011 |
065 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
|
E |
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
||
|
F |
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
|
P |
|
|
|
|
|
NOW! |
o |
||
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|||
|
|
|
|
to |
ВЗЛОМm |
||||
w Click |
|
||||||||
|
|
||||||||
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 |
|
|
|
|
|
|
Алексей»GreenDog»Тюрин,DSecRG.ru,DigitalSecurity(agrrrdog@gmail.com)w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Недостаточноправ?
Достаточно
8ПРИЕМОВДЛЯ ОБХОДАГРУППОВЫХ ПОЛИТИКВДОМЕНЕ
Незнаю,чемруководствовалисьлюдиизMicrosoft,когда проектировалиисоздавалисистемугрупповыхполитик вWindows,нополучилосьунихнеочень.Системаполучиласьгибкойифункциональной,носнемалымколичествомлазеек,позволяющихобойтиограниченияи добратьсядотехместОС,доступккоторымзапрещен.
оправдеговоря,групповыеполитикибылиисследованывдоль
Пипоперекещепятьлетназад.Однакоиспользуемыерешения малочемизменились.Многиебагипо-прежнемуработают.
Крометого,появляютсяновыеприемыдляобходагрупповыхполитик. Поэтомумырешилисобратьдлятебянекоторыйнаборрецептов, чтобыты,во-первых,могвзятьнавооружение,аво-вторых,перестал веритьвто,чтогрупповыеполитики—этопанацея.Привсемудобстве ихиспользованияонинемогутобеспечитьдолжныйуровеньзащиты. Нообовсемпопорядку.
ЧТОЭТОТАКОЕ?
Есливеритьскучнымопределениям,тогрупповыеполитики(илиGroup Policy)—этоэффективныйицентрализованныймеханизмуправления многочисленнымипараметрамиоперационныхсистемиприложений. Групповыеполитикипозволяютадминамопределятьправила,всоответствиискоторыминастраиваютсяпараметрырабочейсредыкакдля пользователей,такидлякомпьютеров.Прощеговоря,этодовольномощныйинструментдляограничениявдействияхобычныхпользователей. Существуетмассаразличныхполитикиправ,спомощьюкоторыхможно запретитьвызовдиспетчеразадачилиредакторареестра,запретитьдоступкменю«Пуск»,атакжедовольногибкоограничитьзапускпрограммногообеспечения(этореализуетсяспомощьютакназываемыхSoftware RestrictionPolicies).Являетсялиэтотмеханизмэффективным?Лишь отчасти.Доступкшорткатам,запусклевогоПОисистемныхприложений, изменениенастроек—всеэтодостаточнолегкозапрещаетсяспомощью групповыхполитик,исэтойточкизренияможносказатьспасиборазработчикамОС.Но,увы,какэтообычнобывает,этиполитикизачастую можнообойти.Тутстоитсделатьоговорку.Всеполитикиможноразбить надвекатегории—длякомповидляпользователей.Групповыеполи- тикидоступныкаквдомене,такиналокальномкомпе.Еслиречьидето локальноймашине,тоихможнопосмотретьчерезспециальнуюоснастку gpedit.msc(secpol.msc).Вданнойстатьеосновнойакцентсделанименно надоменныегрупповыеполитики.Итак,приступим.
ТРЮК1.ОБХОДИМЗАГРУЗКУПОЛИТИК
Давайразберемся,каквообщекаждаямашинавлокальнойсетиполучаетгрупповыеполитикииздомена?Процесссозданиягрупповых политикможноразбитьнаследующиеусловныеэтапы:
1.Админсоздаетобъектгрупповойполитики.
2.Привязываетегоккаким-тоэлементамдомена.
3.Привходевдоменкомпотправляетзапроснаполучениеполитики получаетихвответотдомена.
4.Привходепользователявыполняетсяаналогичныйзапрос,ноуже попользовательскимполитикам.
066 |
ХАКЕР 10/153/2011 |
|
|
|
|
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 |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
Недостаточноправ?Достаточноw Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Win+U+Help+Jumptourl=ПолноценныйExplorer
Итак,чтомыздесьвидим:политикиподгружаютсянастадиивхода всистему.Здесьестьнебольшаяфича.Поумолчаниюобновление политиквыполняетсякаждые5минут.Ноеслиполитикинебыли полученывовремявходавсистему,тообновлятьсяонинебудут! Вырисовываетсяэлементарныйспособ,какэтуособенностьможно использовать:
1.Вынимаемпатч-кордизкомпа.
2.Включаемкомпилогинимсяподсвоейучеткой.
3.Подключаемпатч-кордобратно.
Дажеприотсутствиидоступавсетьмысможемвойтивдомен,так каквиндаранеезакешироваланашлогинипароль(этопроизошлово времяпредыдущеговходавсистему).Ноужебезприменениягрупповыхполитик.Приэтоммыспокойносможемиспользоватьресурсы сети,таккакпатч-кордкэтомумоментубудетнаместе,асовсякими авторизацияминаудаленныхресурсахсправитсясамавинда.Стоит добавить,чтовбезопасномрежимевиндыгрупповыеполитикивообщенедействуют.Комментарии,ядумаю,излишни.
ТРЮК2.КАКПРОИСХОДИТПРОВЕРКАПОЛИТИК?
Важнопонимать,накакомэтапепроисходитсопоставлениедействия,котороехочетвыполнитьпользователь,стемиограничениями групповыхполитик,которыенанегонакладываются.Спервадавай разберемся,гдерасположеныполитики.
Изначально,конечно,наконтроллередомена,откудаужепередаютсянамашинывлокальнойсети.Послеполучениягрупповых политикнаклиентскоймашинеонисохраняютсявреестревиндыв следующихместах(приведеныосновныеветки):
Политики для компа:
•HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\ CurrentVersion\Policies\
•HKEY_LOCAL_MACHINE\Software\Policies\
Политики для пользователей:
•HKEY_CURENT_USER\Software\Microsoft\Windows\CurrentVersion\ Policies\
•HKEY_CURENT_USER\Software\Policies\
Когда запускается какой-то процесс, то в нем (то есть в userspace’е) производится проверка данных веток реестра (через подгруженную библиотеку advapi.dll) на те или иные ограничения, которые потом кешируются/сохраняются в памяти процесса. Они проверяются, когда пользователь выполняет какое-то действие, например запуск ПО. В чем подвох? В том, что контроль производится из самого процесса. То есть если процесс «не захочет» проверять политики, то ничто его не заставит их соблюдать. Никакого общего мониторинга не производится! Отсюда вывод: если мы каким-то образом сможем запустить произвольный процесс, то политики нам
Обходчерезнекорректнуюобработкуярлыков
уже не страшны. Сделать как правило — не проблема. Даже если нет возможности закачать программу на хост, можно выполнить ее удаленно (например, через шару).
ТРЮК3.ОБХОДИМSRP
Увы,дальшенанашемпутивозникаетдругоймеханизмограничений— SRP(SoftwareRestrictionPolicies).Этогруппаполитик,спомощью которыхадминможетограничитьсписокПО,котороеможетзапускать пользователь,черезчерныйибелыйсписки.BlacklistиWhitelist определяютсяспомощьюправил,которыеможнозадаватьнесколькими способами:позонамипосертификатам(первыедвавариантапрактическинеиспользуются),атакжепопутидофайлаипоегохешу.Отом, чтовсистемедействуютполитикиSRP,указываетсоответствующий пунктвреестре—HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\ Windows\Safer\CodeIdentifiers\TransparentEnabledсозначениембольшим0,который,какужебылосказановыше,проверяетсяпризапуске процесса.Нашазадача,соответственно,отрубитьэтупроверкувнутри запускаемогопроцесса.МаркРуссинович(goo.gl/KNauh)ещевдалеком 2005годуопубликовалпоствблогеобобходеSRPипредставилтулзу GPdisable.ОнапроизводитDLL-инъекциювзаданныйпроцесс,подгру- жаяспециальнуюDLL’ку.Когдапроцесспопытаетсяполучитьзначение ключареестраHKEY_LOCAL_MACHINE\Software\Policies\Microsoft\ Windows\Safer\CodeIdentifiers\TransparentEnabled,тоестьбудетпроверятьприсутствиеполитикSRP,даннаябиблиотекаперехватитзапрос ивозвратитSTATUS_OBJECT_NAME_NOT_FOUND.Такимобразом,процессдумает,чтовсеОКиSRPполитикивсистеменедействуют.
ПослепокупкикомпанииSysinternalsМайкрософтомGPdisable пересталбылофициальнодоступным(ноегопо-прежнемулегко найтивСети(bit.ly/nnzjN9).Естьещеболеепродвинутыерешения. УтилитаGPCul8or(bit.ly/nJAYri)отEric’aRachner’aвыполняетаналогичныефункции,нодоступнависходниках.Чтоэтонамдает?Мы можемдобавитьвGPCul8orлюбыедругиезначенияреестравинды (DisableTaskMgr,ProxySettingsPerUserкпримеру)итакимобразом обойтивсевозможныеограниченияполитик.Какиеименнозначения, спросишьты.ТебевпомощьRegMonотМаркаРуссиновича,хотя,по сути—этовсезначенияизветкиPolicies.
ДругойоригинальныйспособвсвоемблогеопубликовалДидье Стивенс(goo.gl/LE1M0).Используясвоютулзуbpmtk(BasicProcess ManipulationToolKit),онпредложилпрямовпамятипроцессаизменять значениенеобходимогодлягрупповойполитикиветкиреестра.
ТРЮК4.BINARYPLANTING
УтилитаGPdisableсостоитиздвухфайлов:
•gpdisable.exe—инъектируетDLLвпроцесс;
•gpdisable.dll—специальнаяDLLдляобходаSRP.
Какяужесказал,еслимыможемзапуститьприложение,то можемлегкообойтиSRPидругиеполитики(черезGPdisable,bpmtk,
ХАКЕР 10/153/2011 |
067 |
|
|
|
|
hang |
e |
|
|
|
|
||
|
|
|
C |
|
E |
|
|
||||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|||
|
F |
|
|
|
|
|
|
|
t |
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
|
|
||||
|
|
|
|
to |
ВЗЛОМm |
||||||
w Click |
|
||||||||||
|
|
||||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
|
.c |
|||
|
|
p |
|
|
|
|
|
g |
|
|
|
|
|
|
df |
-xcha |
n |
e |
|
|
|
|
|
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 |
|
|
|
|
МакросынепалятсяполитикамиSRP
GPCul8or—неважно).Однаковреальнойсистемеможетоказаться нетакужпростозапуститьэтиприложения.Номыможемподгрузить DLL(втомчислеgpdisable.dll).Тутестьважныйнюанс.Групповые политикипризапускеПОмогутпроверятьиDLL’ки,ноприэтом достаточносильнопадаетпроизводительностьсистемы,потому поумолчаниюэтаопцияотключена.Имыэтоможемиспользовать!
ОченькстатиприходитсянедавнееисследованиеоткомпанииAcross Security(bit.ly/ov7EAz),котороерассказываетоновых(достаточно извращенных,ноработающих)методахподгрузкикодавпроцессы. ПриемназываетсяBinaryplanting(икакегоклассическийпример— dllhijacking),приегоизученииуменявозникламысль:«апочемуне использоватьегодляобходагрупповыхполитик?».Еслисистема разрешаетзапускприложенийтолькоизбелогосписка(пускайдаже толькоWord),тоэтогоужедостаточно,чтобыподгрузитьнашуполезнуюDLLдляобходаSRP.Итак,попробуемскреститьdllhijackingот парнейизAcrossиGPdisable:
ГРУППОВЫЕПОЛИТИКИ ВТОНКИХКЛИЕНТАХ
Хочетсяещерассказатьпротакиесистемы,какCitrixXenApp.Что этотакое?XenApp,еслиговоритьпростымязыком,этосистема«доставки»приложений(хотяэтотолькочастьфункционала).Посути, эточто-тотипатерминальногосерверавинды,нокогдапользовате- людоступнотолькоконкретноеприложение.Вжизниэтовыглядит так.ПользовательконнектитсяклиентомкCitrix-серверу—ему выводитсясписокдоступногоПО.Далееюзерзапускаеткакое-то приложениеиначинаетвнемработать.Основнаяфичавтом,что фактическипроцессприложениявыполняетсянаCitrix-сервере.По сути,данныйподходхорош(особенностонкимиклиентами),ноунего естьпучоккосяковсточкизрениябезопасности.Таккакпроцесс—на сервере,то,значит,пользователюдоступнывсересурсысервера(с учетомпользовательскихправ,конечно).Этонеоченьхорошо,так какпредполагается,чтоупользователядолженбытьдоступтолькок запущеннойпрограмме,анекОС.Чтоещехуже,добраться-тодосамой ОС—непроблема.ДажееслиусамогоПОнетвозможностиповзаимо- действиюсОС(нетменю«Открыть»,«Сохранитькак»),тостандартные возможностивиндывсеещеработают:нажимаемвCitrix-приложении <Ctrl+Shift+Esc>—намоткрываетсядиспетчерзадачCitrix-сервера, илиправыйкликпораскладкеклавиатуры,аоттудавфайлсправкис возможностьюлистингадиректорий.Личноястолкнулсясгрупповы- миполитикамиименновэтомконтексте—привзломеCitrix.
ОбходполитикчерезRunas
1.Переименовываемgpdisable.dllвehTrace.dll.
2.Создаемпапкусименемкуку.{2E095DD0-AF56-47E4-A099- EAC038DECC24}(названиелюбое,текстпослеточкиисчезнет).
3.КидаемehTrace.dllвтолькочтосозданнуюпапку.
4.ЗаходимвпапкуисоздаемтамлюбойдокументвWord,Excelили,к примеру,PDF’ку.
5.Теперьоткрываемтолькочтосозданныйфайл.
6.Соответствующаяпрограммадолжназапуститься.Изапустить
вместесподгруженнойDLL’кой! 8. Все,политикинамнестрашны.
ТРЮК5.ИСПОЛЬЗУЕМИСКЛЮЧЕНИЯ
Частоможнообойтисьибезподобныхухищрений,еслизнатьтонкости политик,врезультатекоторыхихдействияраспространяются:
•напрограммы,запущенныеотимениучетнойзаписиSYSTEM;
•драйверыидругиеприложенияуровняядра;
•макросывнутридокументовMicrosoftOffice;
•программы,написанныедляобщеймногоязыковойбиблиотеки временивыполнения(CommonLanguageRuntime).
Итак,процессыотSYSTEMнеконтролируются.Первыйфинтушами: еслиестьдоступккакому-тоПО,запущенномуподтакойучеткой,— атакуем.Например,нажимаемWin+U—запускаются«специальные возможности»(лупаиэкраннаяклавиатура).Utilman.exe(процесс«специальныхвозможностей»)приэтомзапускаетсяотSYSTEM.Далееидем тамв«Справку».Онатожедолжнаоткрытьсяснужнымипривилегиями, таккакзапущенавконтекстепроцессаcправамиSYSTEM.Есливинда несамаяновая(доVista),токликаемправойкнопкойнасинейверхнейпанельке«Jumptourl»,тампечатаем«C:\»иполучаемнастоящийвстроенныйexplorer.Еслиболееновая,томожнопоправомукликувтекстехелпа просмотретьисходныйкод(ViewSource)черезблокнот,откудадалее добратьсядофайлов.Илидругойвариант—«добавить»новыйпринтер, получивопятьжедоступклистингуфайлов.
Другаяинтереснаякатегория—макросывнутридокументов MicrosoftOffice.Этострашноедело. ПопробуемдляначалареализоватьзапускПО.Хотяеслизапускзаблоченобычнымиполитиками(не SRP),как,например,блокировкойдиспетчеразадач,тоэтотобходне сработает.Нонам-тоглавное—запуститьспециальныйexe’шник. Поэтомувлюбомдокументесмелосоздаемследующиймакросипробуемзапуститьего:
Sub GOSHELL()
Shell "C:\windows\system32\regedit.exe", vbNormalFocus
End Sub
068 |
ХАКЕР 10/153/2011 |