Ako stiahnuť databázu - #3/3: Captcha

08.11.2007 22:45 | blackhole_matej

Na záver trilógie si povieme niečo o trochu odlišnom probléme pri strojovom prístupe k web stránkam, ktorý dosť súvisí s ťahaním databáz: ako obabrať písmenkovo/obrázkové captcha.
Článok je nevoľným pokračovaním prvého a druhého fragmentu, preto je vhodné si ich najprv prečítať.

----------
2.3 Captcha ----
Prevádzkovateľ ZvieratkoDB, ktorý naozaj veľmi nechce, aby sme si databázu stiahli "strojovo", zabezpečí prístup ku show.cgi pomocou tzv. captcha obrázkov. Tieto nielenže znepríjemňujú život obyčajným smrteľníkom (najmä tým s horším zrakom), znemožňujú celý pobyt na stránke používateľom textových terminálov (aj keď už som videl aj ASCIIart captcha, čo ma veľmi potešilo), ale ak sú dobre vymyslené, aj zabraňujú "strojovému" ťahaniu. Vytrvalého ťahača ale ani captcha neodradí, môže totiž skúsiť:

  • OCR --- slabo "spotvorené" texty na obrázku je možné prečítať (a v rámci pokroku číslicového spracovania sa možno o pár [desiatok] rokov dočkáme úplného vyhynutia captcha v textovo-obrázkovej forme).

  • Brute-force --- ak má captcha veľmi málo znakov (2-3), môžeme ho strojovo "hádať", veľmi to však predlžuje počet potrebných IPdní. Na ťahanie väčšej databázy je tento prístup bez obrovského botnetu nepoužiteľný.

  • "Hacknúť" zle spravené captcha --- slabá implementácia môže viesť k jednoduchému a rýchlemu strojovému riešeniu (niekedy priam triviálnemu). Náchylné zvyknú byť také captcha, ktoré niekto omylom nazval "technológiou", zatiaľ čo ich navrhoval stredoškolák, synček podpredsedu, bez zjavných teoretických znalostí alebo serióznych praktických skúseností. Konkrétne aj prevádzkovateľ ZvieratkoDB ;).

    Plaintextová hodnota v Cookie alebo v skrytej premennej vo formulári je lahôdkou pre grep|sed:

    <INPUT type="hidden" name="porovnaj_s" value="k682k4sfds">
    <IMG src="captcha/k682k4sfds.gif">
    Takto testujeme, ci nie si slepy:
    <INPUT type="text" name="user_zadal" value="" size="10">

    Iný prípad (tiež triviálny) je znovupoužitie, teda niečo na spôsob:
    <INPUT type="hidden" name="captchaid" value="98745">
    Kontroluje sa, či zadaný text je správny pre dané captchaid (uložené v databáze, alebo nejakej session, bez kontroly znovupoužitia). Captcha ručne vyriešime raz a použijeme L krát takto:
    wget -O - "http://zvieratko.db/show.cgi?id=$i&captchaid=98745&user_zadal=k682k4sfdd"

    Vyzývam všetkých, čo to pochopili, aby to nešli tým lamám na zvieratko.db vysvetľovať (ani iným lamám, a už vôbec nie novinárom) -- chceme totiž naďalej voľne stiahnuteľnú ZvieratkoDB.

  • Riešenie náhodnými ľuďmi --- ak vlastníme (alebo nejaký kamarát, známy, apod. má v správe) často navštevovanú (porno) stránku, môžeme pomocou skriptu stiahnuť obrázok, ktorý chceme lúštiť, prezentovať ho návštevníkovi ako podmienku vstupu na stránku, a obratom použiť na cieľovej DB.

  • Najímanie ľudí --- každý piaty je Číňan, preto by nemal byť problém nájsť ich dostatočný počet na vyriešenie úlohy v požadovanom čase ;).

Nie vždy je nutné captcha naozaj riešiť. Niekde môže byť použité ako prevencia príliš častého ťahania, t.j. nie je vyžadované pri každom show.cgi, ale až po prekročení limitu (na umožnenie neobmedzeného prezerania ľuďmi). V takých prípadoch, ak captcha nemáme možnosť strojovo vyriešiť/obísť, ho skrátka ignorujeme a rešpektujeme limit. Ťahanie pokračujeme z inej IP (viď. časť 2.2 Limit na IP).

2.4 Ďalšie obmedzenia ----
Prípadné ďalšie obmedzenia môžu síce prispieť ku vyššej ochrane pred stiahnutím databázy "ťahačmi", výrazne však znižujú možnosti prístupu ku stránke rôznym alternatívnym web browserom, proxy cache serverom, zafirewallovaným systémom s anonymizérmi atď. Napriek "dobrému úmyslu" to môže dopadnúť tak, že web stránka by bola prístupná iba ľuďom s WinXP/Vista s plne opatchovaným IE7, so zapnutými obrázkami, bez proxy servera a firewallu po ceste.
Jedná sa o obmedzenia ako napríklad:

  • Kontrolovanie http Referer hlavičky;
  • Povolenie prístupu iba niektorým prehliadačom (zakázanie Wgetu);
  • Vyžadovanie Cookies;
Keď na to príde, všetky tieto vlastnosti sa dajú pomocou wget nasimulovať (--referer, --user-agent, --load-cookies), a vytrvalý ťahač bude na tom nakoniec stále lepšie, ako nevinný smrteľník, ktorému tá stránka napr. v Opere ani za svet nepôjde.

3. Iné vychytávky ----
Nechceme sa tváriť pri ťahaní ZvieratkoDB príliš nápadne. Ak vieme vyčerpať denný limit za pol hodinu, nebudeme tú pol hodinu spamovať cieľ -- mohlo by to viesť ku zahlteniu (a spomaleniu) servera, alebo sa výrazne prejaviť na grafoch prevádzky, čo by si mohol niekto "zodpovedný" všimnúť. Pridáme sem-tam nejaký ten sleep pred wget, prípadne na ťahanie použijeme business hours, nech sa "stratíme" medzi bežným trafficom.

Taktiež nemusíme ťahať záznamy porade, ale môžeme sa tváriť náhodne. Na tento účel môžeme "idlist.txt" prehnať cez rl, alebo využiť primitívne čísla modulo P (P prvočíslo, P>L).

Ťahači, ktorí to myslia vážne, si do bash skriptu dorobia veci ako ukladanie stavu pri signále (napr. trap ulozstav INT HUP), multifunkciu proxy/zmenaIP, a čokoľvek ďalšie, čo ich napadne.

4. Záver ----
Stiahnutú databázu buď ponecháme v univerzálnom formáte .txt, alebo podstrčíme mladšiemu súrodencovi na nakódenie frontendu pre sql kvôli priamym aj reverzným lookupom. V prípade ZvieratkoDB nezabudnúť na recode windows1250..iso8859-2.

Žiadna verejne prístupná DB nie je strojovo nestiahnuteľná. Niekedy sa to dá poriadne skomplikovať, ak sa to však preženie, ani bežný smrteľník sa k tomu potom nedostane. Použitím "rozumného" IP limitu vie prevádzkovateľ DB síce odradiť slabších ťahačov, ale zároveň zrušiť väčšie siete používajúce proxy (spomeňme napríklad bratislavský roburnet alebo ynet, a väčšina firemných sietí).

Napríklad taká ZvieratkoDB je stiahnuteľná za 54k IPdní (napriek tomu, že má captcha "ochranu"), čo je iba mesiac z biednych 1800 verejných IP ;) Použitím dobre implementovaného captcha vie prevádzkovateľ odradiť aj tých hustejších ťahačov. Vytrvalý a odhodlaný ťahač s dostatočným počtom Číňanov ale stiahne všetko :)

No a keď databáza nie je verejne prístupná, ostávajú už len metódy, ktoré sa vo všeobecnosti môžu nazývať ("hackerskými") prienikmi.

----------
#1: Úvod, Disclaimer, Ilustračná DB, 1. Jednoduchý prípad, 1.1 Ide to pomaly..., 1.2 Ošetrovanie chýb
#2: 2. Obmedzenia, 2.1 Náhodné id, 2.2 Limit na IP, Ako získať veľa IP
#3: 2.3 Captcha, 2.4 Ďalšie obmedzenia, 3. Iné vychytávky, 4. Záver

    • Re: Ako stiahnuť databázu - #3/3: Captcha 10.11.2007 | 22:11
      Avatar Alexej   Používateľ
      Napr www.gme.cz pouziva obrazkovou kontrolu pro pristup k kalatlogovym listum a dokumentacim a ochrana(spis buzerace klientu): Hadejte jake cislo je na obrazku ;-) Linux akbar!
      ---- -_ _-_- _-_ _ ---- - -__- -_-- -_ _- - _