niedziela, 5 kwietnia 2009

CCN, Luhn a WAF

W przerwie pomiędzy przyjemnościami weekendu postanowiłem zerknąć w Google Readera. Natknąłem się na całkiem ciekawy post. Honeypoty to bardzo ciekawy temat i był pierwszym gdzie zauważyłem zastosowanie skryptu do wykrywania numerów kart kredytowych. Moje doświadczenie pokazuje, że zastosowanie miałby także na serwerach z dużą liczbą kont shellowych. Nie jedno z nich zostało/zostanie/jest przejęte przez osoby związane z phishingiem i stanowi kanał wymiany danych w ramach grupy dystrybucyjnej dla skradzionych numerów kart kredytowych. Taki skrypt to rzecz jasna nie panaceum na całe zło ;) Phisher może odwrócić sytuację i uruchomić skrypt na przejętym serwerze. A nóż widelec ktoś zapisze numer swojej/czyjejś (powstrzymam wodze fantazji - sami wymyślcie, nie chcę by ktoś się obraził ;)) karty, tak na chwilę, jako okienko do przeklejenia go gdzieś dalej. Wtedy nawet nie trzeba specjalnie namawiać kogoś do podania numeru karty. Uważam, że ryzyko jest tutaj na tyle mniejsze od zastosowania w wykrywaniu incydentów, że gra warta jest świeczki.

Nie chcę skupiać się na samym inotify, bardziej interesujący wydaje mi się sposób rozpoznawania numeru karty kredytowej. Autor zastosował bardzo popularny sposób detekcji numerów kart, wyrażenie regularne. Niestety generuje on bardzo dużo fałszywych pozytywów. Dobrze, że doczytałem cały post do końca, razem z komentarzem Marcina Wielgoszewskiego. Od razu zaświeciła mi się lampka - "przecież jest algorytm Luhn'a!". Marcin właśnie go polecił, a argumentował to w taki sam sposób jak ja - duża liczba false positive przy zastosowaniu tylko wyrażenia regularnego.

Nie byłbym sobą ;) bez spojrzenia na temat oczami rozwiązań typu WAF. Znam tylko jeden, który potrafi sprawdzać dany ciąg cyfr wg. algorytmu Luhna. Jest nim mod_security. Poniżej znajduje się fragment kodu, implementacja algorytmu (plik apache2/re_operators.c).


Za pomocą operatora verifyCC można w prosty sposób weryfikować poprawność numeru karty kredytowej.

"Czy to oznacza, że mój WAF jest zły? :/" - nie. Nie mam aktualnie wiedzy czy algorytm ten zaimplementowany jest dla innych WAF'ów. Po kilku kliknięciach w Google widzę, że nie jest tak tragicznie. Np. z poziomu iRules można zrobić to na urządzeniach firmy F5.

Czy to już wszystko? Nie. Do obowiązkowej lektury należy Anatomia numerów kart kredytowych. W całość zaskakuje mnie jedno. Już sam wpis na wiki mówi o dodatkowym wariancie w algorytmie Luhn'a. Niestety nie został on uwzględniony w implementacji operatora verifyCC mod_security. Zaznaczony na czerwono fragment kodu wskazuje, że wykonywana jest operacja sum[odd] %= 10;. Implementacja (iRule) dla F5 robi (tylko :() to samo.

PS
Problem fałszywych pozytywów dla CCN dotyczy także wielu innych rozwiązań, które mają utrudnić/uniemożliwić ich kradzież. Powstrzymam się i nie zaprezentuję jak można je omijać. Berek ;-)

0 komentarze: