книги хакеры / журнал хакер / 149_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 |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Определяем координаты
ности(впоследнеевремяFlash Player простокишитуязвимостями) и необходимостиустановкисамогоплагина. СтандартHTML5 предлагаетэлегантноерешение— встроеннаявозможностьпроигрывания видео- иаудио-контента.
Наверное, многиеужедогадались, чтояговорюотегах<audio> и<video>. Они-тоипозволяютвстраиватьаудиоивидеопрямов
страницу. Единственноеогорчение, скоторымприходитсясталкиваться— наборподдерживаемыхкодеков. Увы, длякаждогобраузера этотнаборразличен, поэтомуестьбольшаявероятность, чтотвой видеороликбудетпрекрасноотображатьсявChrome, апользователи FireFox уйдутлесом. Чтобынепопастьвтакуюситуацию, рекомендуетсяпозаботитьсяоподстраховочномварианте— воспроизведению роликаспомощьюFlash-плеера. Оняшках(нет, все-такионнепере- путалслова, придетсяпролечитьегоэлектросудорожнойтерапиейот аниме-зависимости— прим. Лозовского) ипроблемахпоговорили, теперьперейдемкпрактике. Длядемонстрациивоспроизведения видеоянакидалпростенькийпримерчик:
<!DOCTYPE html>
<html><body><video src="video-for-sample-1.mp4" poster="screen-for-sample1.jpg" controls>
Здесь должно быть видео. Если ты видишь этот текст, то твой браузер не поддерживает новый стандарт. </video></body></html>
Обративнимание, чтовпримередлятега<video> яуказалатрибут poster. Внемяуказываюпутькграфическомуфайлу, которыйдолжен бытьотображенсразупослезагрузкистраницы— «первыйкадр». Длячегоэтоможетпригодиться? Каквариант, вкачестветакогоизображенияможновставлятьлоготипсвоейкомпании/проекта.
Тег<audio> применяетсяаналогичнымобразом. Внемразрешено указатьсразунесколькоисточниковнамедиафайл. Такимобразом, тыможешьвыложитьодинитотжефайлвразныхформатах(ogg, mp3). Есливбраузерепользователяотсутствуеткодекmp3, тобудет предпринятапопыткавоспроизвестиogg. Получается, чтопутемнесложныхманипуляцийлегкорешитьпроблемусовместимостиибыть уверенным, чтопользователюудастсявоспроизвестиконтент.
Рецепт№3:Whereareyounow (geolocationAPI)
Geolocation API — программныйинтерфейсдляопределениякоординатпользователя. Наоснованииполученныхданныхлегкоотметить местонахождениеюзера, скажем, наGoogle Maps. Гдеможноприменятьэтувозможность? Дамногогде! Например, разработчики популярногосервисамикроблоггингаTwitter используютGeolocation API вweb-интерфейсетвиттер-клиента. Еслипользовательразрешает получатьсведенияосвоемместоположении, токовсемеготвитам будетдобавлятьсягород, вкоторомоннаходитсявданныймомент. Несомневаюсь, чтосейчастебямучаетвопрос: «АоткудаGAPI получаютсведенияоместоположении?». Даженедумай, чтовделе замешаныспутники-шпионыипрочиебондовскиештучки. Всекуда прозаичней— пакетинформациидляанализастроитсянаосно- ванииданныхобIP-адресе, ближайшихWi-Fi хотспотах, GPS (при наличииустройства), GSM cell ID итакдалее. Еслизаинтересовался теориейипрактикойполученияпримерныхкоординатизперечисленныхвышеисточников, тосоветуюподнятьподшивку][ инайти статьюStep’аподаннойтеме, гдеонхорошоразобралтеоретическуючасть, атакжедалобзорсоответствующегософта. Теперь
XÀÊÅÐ 06 /149/ 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 |
|
||
|
|
|
|
-x cha |
|
|
|
|
взглянемнапримериспользованияGAPI. Всепредельнопростои понятно:
<!DOCTYPE html> <html>
<body>
<script language="JavaScript"> if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition( function (position) {
document.getElementById("latitude").innerHTML = position.coords.latitude;
document.getElementById("longitude").innerHTML =
position.coords.longitude;
},
);
}
</script>
<div id="coords">Широта: <span id="latitude">Unknown</span> <br />Долгота: <span id="longitude">Unknown</span><br /> </div>
</body>
</html>
Передтемкакпытатьсяполучитькоординаты, необходимоубедиться, чтобраузерподдерживаетGAPI. Еслиметодgeolocation вернулtrue, товсевпорядкеиможновыполнитьпопыткуполучениякоординат. ДляэтоговоспользуемсяметодомgetGurrentPosition объекта navigator. Вслучаеуспехамыполучимкоординаты, которыепрямикомотправятсявдокумент.
Рецепт№4:Базаданныхвбраузере
Приразработкеweb-приложениймыпривыклииспользоватьбазы данных. MySQL, SQLite — продукты, знакомыекаждомупрограммисту. ПятаяверсияHTML приноситнамещеодинподарок— возможностьпользоватьсяавтономнойSQLite базойданных. Стоп! Получается, чтовседанныебудутхранитьсянакомпепользователя? Да, именнотак. Ненужноподниматькрик, чтоэтонебезопасно. Для определенныхпроектовэтавозможностьвполнеможетсгодиться. К сожалению, поканевсебраузерыпозволяютработатьсэтойбазой. Например, IE9 иFF4 покатакойвозможностинеимеют, такчтопознакомитьсясфишкойнапрактикеможноразвечтовGoogle Chrome. Янестануприводитьпримерреальногокода, апокажулишьобщий принципработы:
this.db = openDatabase("xakep", "1.0", "test", 8192); tx.executeSql("create mytable if not exists " +
"checkins(id integer primary key asc, field_number_one string)",
[], function() { console.log("Запрос успешно выполнен"); }); );
Повнимательнееприсмотревшиськприведенномувышепримеру, ты заметишь, чтовцеломработасовстроеннойБДпроисходитточнотак же, какисобычнымSQLite: открываембазу, готовимтекстзапросаи выполняемего.
HTML5.Shutdown()
ПрименятьHTML5 всвоихпроектахилинет— делотвое. Ясчитаю, чтосейчассамоевремя. Еслитыпрофессиональнозанимаешься разработкойсайтов, тонеленисьвстраиватьHTML5-фишкиуже сейчас. Самособой, незабывайзаботитьсяосовместимости— реализовывайподдержку, какдлясовременныхбраузеров, такидля устаревших. Утебядляэтогоестьвсенеобходимое(смотриврезки). Нетормозиистарайся, чтобытвоипроектывыделялисьнафоне остальных. Удачи! z
109
|
|
|
|
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 |
|
|
|
|
CODING
Александр Эккерт (stannic.man@gmail.com)
|
|
|
|
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 |
|
|
|
|
Программерские
типсыитриксы
Локальное
хранилище
потока, или что такое TLS
В этой статье речь пойдет о системных программистских трюках, которые помогут тебе сделать свой код более четким, легким и красивым с хакерской точки зрения. Да! Теперь твой код будет вызывать зависть коллег по цеху и повышенное внимание противоположного пола (лето влияет :)), а также в разы повысит твою самооценку.
Трюк#1,или
Elpueblounidojamasseravencido!
Хорошийлозунгчилийскихреволюционеров, каксчитаешь? ВWindows все(нуилипочтивсе) построенонапривилегиях, посколькулюбойкод, исполняющийсявсистеме, такилииначеобладаетстрогоопределеннымивозможностями.
Ясейчаснеимеюввидуразделениеядраиюзермодногокода. Речь идетопривязкекодаксистемепользовательскихпривилегийв Windows потипу«Всевокругп******ы, одиняД’Артаньян». Тоесть, ввиндесуществуетдовольносложныймеханизм, которыйтолькои делает, чтопроверяет, можешьлитывыполнитьопределенныйкод илинет. Дляэтогодажепредусмотренмеханизмполученияпривилегий— вызовытакихWinAPI-функцийкакRtlAdjustPrivilege, AdjustTokenPrivileges ипрочих. Кпримеру, простотаквызватьWinAPI
ExitWindowsEx() унаснеполучится, дляэтоговызывающийкоддолжен обладатьсоответствующимипривилегиями, чтовклассическомвариантевыглядитвоттакимобразом(кодпоскипан):
VOID sutdownSystem()
{
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{...}
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);
if (!ExitWindowsEx(...)) {...}
}
Идея, заложеннаяразработчикамиWindows вданном(илилюбом другомпохожем) коде, впринципеабсолютнонормальна, понимаема иадекватна: нетпривилегийдлявыполненияопераций— попро-
буйихполучить! Приэтомвседелаетсяисключительноизблагих намерений— защититьсистемуотнесанкционированныхдействий (иликривыхручек) пользователя, могущихнанестиущерббезопасностисистемы. Кпримеру, начинаясWindows Vista всеисполняемые программыподефолтунеимеютадминистраторскихправ. Вчестной системедляувеличениясвоихправнужноихчестнозапрашивать. Номыжитьчестнонепривыкли, намнужновсе, сразуимного, ведь верно? :). Вобщем, какгласитоднапопулярнаяпоговорка: «Если нельзя, нооченьхочется, тогдаможно». Такипоступим, причемсамымипростымисредствами, безвсякиххитрыхизворотов, перехватов, сплайсинга, недокументированныхфункцийипрочихненужных внашемслучаевещей.
«Кактакоевозможно?», — спросишьты. Сейчасувидишь, каквыполнитьпривилегированныйкод, неполучаяпривилегий. Итак, долой привилегии!
Кактызнаешь, определеннаячастьважныхсистемныхфункций, представленныхвkernel32.dll иntdll.dll, являютсятакназываемымифорвардингами. Тоесть, определенныефункциивkernel32. dll иntdll.dll насамомделеявляются«заглушками». Например, созданиефайлапроисходитпримернотак: kernel32!CreateFileW Æ ntdll!NtCreateFile Æ[вызовINT 0x2e] Æntos!ZwCreateFile Æ(...).
Наблюдениезасистемойвразличныхусловияхпоказало, чтопри штатномвызовесистемныхNt*-функцийпрямоеобращениес соответствующимипараметраминапрямуюкобработчикупрерыванияINT 0x2e позволитвызывающемуобойтисьбезвызовов kernel32!CreateFileW илиntdll!NtCreateFile. Такимобразом, все,
чтонамнужно— этонапрямуюдернутьINT 0x2e, передавобработчикуэтогопрерываниянужныепараметры. Ичтосамоезабавное
— такойтрюкпройдетбезполучениянеобходимыхпривилегий, достаточнопростовызватьприведенныйнижекодизсвоейпрограммы! Добавлю, чтопрерываниеINT 0x2e появилосьначинаяс Windows 2000. ИхотясWinXP былавведенаспециальнаяинструкцияSYSENTER, радисовместимостипрерываниеINT 0x2e было оставлено.
Кодоченьпрост, онвсеголишьповторяетто, чтоделаетсамасистема:
__declspec(naked) NTSTATUS __cdecl NtCallStub(
__in ULONG SdtNumberOfFunc, ...)
110 |
XÀÊÅÐ 06 /149/ 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 |
|
|
|
|
{
__asm
{
mov eax, [esp+4] lea edx, [esp+8]
int 0x2e ret
}
}
//здесь SdtNumberOfFunc — номер Nt*-функции
//в таблице SSDT
Такимвотнехитрымспособомможновызватьлюбую
NT*-функциюбезвсякойRtlAdjustPrivilege. Неверишь?
Попробуйсам. Правда, наx64-битныхсистемахуказан- ныйкодработатьнебудет, посколькутамдлявызова шлюзаиспользуетсякомандаSYSENTER (думаю, тыбез трудасправишьсяисэтим, написавуниверсальную оберткуподSYSENTER). Вкачествеполезнейшегопобочногоэффектавызованужныхфункцийчерезшлюз INT 0x2e хочуотметитьследующее: этотспособможно использоватьдляобходаперехваченныхюзермодных функций. Ну, кпримеру, решилимычто-тозаписатьв реестрчерезвызовWinAPI — NtCreateKey(). Этафункция экспортируетсяntdll.dll, и«правильные» аверыперехватываютее(впрочем, какивседругиефункциидля работысреестром). Еслипосмотретьвотладчик, то можноувидеть, чтовызовNtCreateKey представляетсобойвконечномитогелишьпередачувходныхпараме-
тровфункциишлюзуINT 0x2e сномеромсамойфункции. ПараметрыбудутпереданывсвоюочередьужекернелфункцииZwCreateKey, котораясоздастновыйключв реестре. Пологикеаверов, еслиперехватитьфункцию ntdll.dll!NtCreateKey, тоеевызывающийобязательно попадетсявловушкуавера. Нонетут-тобыло… Еслиобратитьсянапрямуюкшлюзу, топерехватчик, установленныйнавызовеNtCreateKey, останетсявневедении, что кто-топодлезподнего, исоспокойнойдушойтворитсвои темныедела. Кбольшойголовнойболиразработчиков всякихтамхипсов, проактивокиаверов, теперьчтобы обойтихукntdll.dll!NtCreateKey достаточновызватьвышеуказаннуюоберткуобработчикаINT 0x2e. Такойтрюк, во-первых, нетребуетполучениявозможныхпривилегий длясвоеговызова, аво-вторыхнасамомделевызовет системнуюAPI NtCreateKey() итемсамымпосадитвлужу половинуаверов, которыевсеещенадеютсяперехватить вызовопасныхдлясистемыюзермодныхфункций. Хотя справедливостирадинадопризнать, чтодляотлова такиххитропопыхвывертовнужнолишьперехватитьINT 0x2e (илиSYSENTER). Этоделаютнаиболеепродвинутые антивирусы, однакодалеконевсе.
Трюк#2,илисвойантивирус наскоруюруку
Основываясьнапервомтрюке, можновтечениепары днейилинесколькихчасов(приналичиипрямыхрук, разумеется, иисходниковсдиска) соорудитьнекое реалистичноеподобиепроактивнойзащиты, котораяс
DVD |
dvd
На DVD ты найдешь приведенный в статье код, который поможет тебе создать свою проактивку.
HTTP://WWW
links
Блог главного разработчика ReactOS Алекса Ионеску (море интересной и увлекательной инфы о внутренностях Windows): alex-ionescu.com
XÀÊÅÐ 06 /149/ 2011 |
111 |
|
|
|
|
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 |
|
|
|
|
CODING
|
|
|
|
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 |
|
|
|
|
оченьбольшойвероятностьюсможетопределитьналичиеюзермодныхперехватовсистемныхфункций. Восноведанной«проактивки» будетлежатьнезависимоевычислениеианализстартовых адресовпотоков, атакжепроверкапрологафункцийнапредметне установленливпервыхпятибайтахфункцииJUMP куда-то-там- далеко.
if( threadHandle = OpenThread(THREAD_GET_CONTEXT, FALSE, currThreadEntry.th32ThreadID ) )
{
StartAddress = GetThreadStartAddress( threadHandle ); if( ( StartAddress < 0x00401000 ||
StartAddress > 0x0040156B ) && StartAddress < 0x70000000 )
{
// подозрение на перехват
}
else
{
NtGetContextThread( threadHandle, &ctx );
if( ( ctx.Eip < 0x00401000 || ctx.Eip > 0x0040156B )
&&ctx.Eip < 0x70000000 )
//подозрение на перехват
}
NtClose( threadHandle );
}
ЗдесьвызовNtGetContextThread будетпроисходитьнапрямуючерез INT 0x2e спередачейномерафункцииинеобходимыхпараметров. Полныйкод, реализующийпортативнуюпроактивку, тысможешь найтинадиске. Вееоснове, какяужеотмечал, лежитвозможность вызованеобходимыхфункцийнепосредственночерезINT 0x2e.
Трюк#3или
своиmalloc/reallocвядре
Действительно, еслиmalloc можнозаменитьнаExAllocatePool, то окажется, чтоаналогатакойфункциикакrealloc вядренет. Чтоже
112
делать? Рекомендуюреализоватьсвойаналогmalloc/realloc, тем болеечтоониоказываютсякрайнепростымииявляютсобойпростооболочкуподвызовфункцииExAllocatePoolWithTag (функция ExAllocatePool, поутверждениюMSDN, являетсяустаревшей, иее рекомендуетсязаменитьнаExAllocatePoolWithTag).
VOID * malloc(ULONG size)
{
PVOID data = 0;
data = ExAllocatePoolWithTag(PagedPool, size, "Tag"); memset(data, 0x0, size);
return data;
}
И,соответственно,реализацияпсевдофункцииrealloc:
VOID * realloc(PVOID memPtr, ULONG size, ULONG oldSize)
{
PVOID newPtr = 0;
newPtr = ExAllocatePoolWithTag(PagedPool, size, "Tag"); if( !newPtr )
return 0;
if ((oldSize) && (memPtr))
{
RtlMoveMemory( newPtr, memPtr, oldSize); ExFreePool(memPtr);
}
return newPtr;
}
Заключение
Нестоитприниматьвсенаписанноевсерьез, нодумаю, чтоидеи, приведенныевстатье, тебепонравятся, итысможешьнайтиимдостойноеприменение.
УдачногокомпилированияидапребудетстобойСила! z
XÀÊÅÐ 06 /149/ 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 |
|
|
|
|
Реклама
|
|
|
|
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 |
|
|
|
|
SYN/ACK
Анна Лучник
|
|
|
|
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 |
|
|
|
|
Система
предотвращения
вторжений в TMG 2010
Разбираем TMG, NIS, GAPA и другие сокращения
Все сложнее представить компанию, которая не использует интернет в своей работе. Разумеется, через интернет компьютеры компании подвергаются атакам как хакеров, так и вредоносного ПО. Все это приводит к усложнению средств безопасности и добавлению к ним новых компонентов.
Системы предотвращения вторжений позволяют выявить сигнатуру известной атаки или аномальную для системы активность, которая также может быть атакой. В статье будет рассмотрена система предотвращения вторжений, интегрированная в TMG 2010.
ВозможностиTMG2010
На смену ISA 2006 пришел TMG (Threat Management Gateway) 2010 — программный продукт семейства Forefront, включающего в себя разнообразные решения для обеспечения безопасности. TMG в большей степени ориентирован на обеспечение безопасного доступа корпоративных пользователей к глобальной сети и их защиты от внешних угроз. TMG 2010 включает в себя межсетевой экран, VPN, систему предотвращения вторжений и позволяет осуществлять проверку на наличие вредоносных программ и фильтрацию URL-адресов.
Что же изменилось и что добавилось в новой инкарнации ISAсервера? TMG можно установить только на 64-битные ОС, при этом Windows Server 2003 не поддерживается. Также TMG нельзя установить на контроллер домена.
С точки зрения настройки TMG в качестве межсетевого экрана, принципиальных изменений, по сравнению с ISA 2006, нет – вс¸ те же правила доступа и публикации, сетевые объекты, расписания и протоколы (рис. 1).
Появился отдельный раздел, посвященный настройке web-доступа (рис. 2). С точки зрения обнаружения вторжений в разделе Web Access Policy важна новая возможность проверять исходящий HTTPSтрафик. При этом сохранилась возможность проверять входящий SSL-трафик, используя SSL bridging. HTTPS inspection (рис. 2) позволяет минимизировать вероятность обхода системных политик путем туннелирования трафика через защищенное соединение, но сама возможность реализуется через атаку Man-in-the-middle. Для этого генерируется специальный сертификат (HTTPS inspection certificate), который должен быть добавлен в хранилище доверенных корневых сертификатов на всех клиентах. HTTPS inspection не работает с SSTP-соединениями и самоподписанными сертификатами
– такие ресурсы необходимо добавлять в раздел исключений. Нужно учитывать, что при использовании HTTPS inspection сертификаты не проходят проверку Extended Validation (EV) SSL, как следствие —
современные браузеры не будут окрашивать в зеленый цвет строку с адресом сайта.
Через новый раздел E-Mail Policy можно настраивать антиспам- и антивирусную проверку почты. Для удаленного доступа добавлена поддержка протокола SSTP.
Существовавшие раньше настройки по защите от распространенных сетевых атак (рис. 3), блокировке неиспользуемых IP-опций и фрагментов пакетов, а также ограничения на количество одновременных сессий и запросов на соединения переместились в раздел Behavioral Intrusion Detection (рис. 4). По сравнению с ISA 2006 добавилась возможность подключения поддержки IPv6 при работе TMG в качестве сервера Direct Access. И появилась возможность настраивать квоты для SIP (Session Initiation Protocol). Самое главное, что в разделе Intrusion Prevention System появилась полноценная сигнатурная сетевая система предотвращения вторжений — Network Inspection System (NIS).
Системыпредотвращениявторжений
Системы обнаружения вторжений (Intrusion-Detection System или IDS) — это набор методов и инструментов (программных и аппаратных), позволяющих выявить и оповестить об активности, которая необычна для данной системы — нарушает политику, либо содержит ошибки или сигнатуры известных атак. Системы предотвращения вторжений (Intrusion Prevention Systems — IPS), в дополнение к возможностям IDS, выполняют действия, способные предотвратить атаку.
Традиционно IDPS делятся на системы, работающие на уровне сети, на уровне хоста и гибридные. Сетевые IDPS (Network Based IDPS — NIDPS) анализируют сетевой трафик с целью выявить в нем атаки и подозрительную активность. IDPS на уровне хоста (Host Based IDPS — HIDPS) отслеживают параметры конкретного узла (такие как журналы приложений и ОС), системные вызовы, изменения на уровне файловой системы.
В IDPS для обнаружения атак используются сигнатуры, выявление аномалий или политики. Anomaly Based IDPS и Policy Based IDPS позволяют выявить ранее не известные атаки, но обладают более
114 |
XÀÊÅÐ 06 /149/ 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 |
TMG |
||
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
NIS
GAPA
|
|
|
|
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 |
|
|
|
|
Ссылки по теме |
|
Об авторе |
|
|
|