mokejimai.lt subtilybės

November 24th, 2007

Šiandien teko iš arčiau susidurt su mokejimai.lt SMS sistema. Aš esu šiaip visų tų mokėjimų opozicininkas, nes man labai jau lupikiškai atrodo tie atimami mokesčiai, bet ką jau padarysi, teko susidurt, tai teko… Taigi, situacija buvo paprasta - reikėjo į vieną failą nukreipt kelis keywordus turinčio numerio priėmimą, teksto apdorojimą, įtraukimą į duomenų bazę ir informacijos grąžinimą. Pasakysiu atvirai - nesitikėjau, kad taip gerai viskas seksis ir nereikėjo nei vieno testinio SMS išsiųst. Jei kada bus poreikis, ir atsiras noro, gal ir parašysiu mokejimai.lt universalų API, skirtą duomenų apdorojimui bet kokioms reikmėms. O jeigu kam prireiks šiaip kokio scriptuko, rašykit admin@vipnight.net, susitarsim. Brangininkas nesu, bet alų mėgstu, o ir pasupportinu, jei reikia. Tai tiek šiai nakčiai.

Elementari serverio sauga

November 21st, 2007

Šiąnakt sėdėjau ir mąsčiau, kokie pagrindiniai aspektai padeda įsiskverbt į serverį hackeriui… Taigi, viską pabandžiau sudėliot eilės tvarka (mano ir jūsų nuomonės gali skirtis, tad nepeikite).

1. Netvarkingi php/perl/asp scriptai.
Kaip žinia, tai labai palengvina įsilaužėlio dalią, nes tai padeda surengt CSS/XSS ataką, SQL injekciją (aklą arba tikslingą), įkelti scriptus įgalinančius jam praplėst veiksmų spektrą (web shell).

2. Gavus priėjimą prie serverio pasinaudojant pirmu žingsniu, daromas antras - naudingos informacijos paieška. Dabartiniai hostingų adminai pagaliau susivokė ir pradėjo riboti PHP/PERL scriptų veiksmus (disabled_functions, safe_dir, suPHP). Tačiau yra viena mySQL klaida (ar tai funkcija daryta tikslingai, bet įsilaužėlių panaudota būtent savo tikslams), leidžianti skaityti lokalius failus. Asmeniškai mano pirmas taikinys būtų phpMyAdmin. Naudojant automatinį įdiegimą iš paketų (konkrečiai kalbėsiu apie Debian pagrįstas sistemas), yra sukuriamas mySQL vartotojas ‘debian-sys-maint’ (gal suklydau, bet dabar tingiu aiškintis), kurio slaptažodžio žinojimas tolygus visai mySQL DB kontrolei.

3. mySQL ir FTP slaptažodžių sutapimas.
Retas, tačiau vis dar pasitaikantis atvejis, kaip FTP ir mySQL slaptažodžiai sutampa. O jei dar yra SSH (nors dar nemačiau nei vienos brandžios hostingo kompanijos, kuri tai duoda, cPanel ir DirectAdmin automatiškai suteikia /sbin/nologin arba panašias direktyvas).

Taigi, įvertinkime tokią situaciją - įsilaužėlis pateko į vidų (turi FTP ir mySQL slaptažodžius). Asmeniškai man teko susidurt su tuo, kad įsilaužėlis paleido MassMail PHP scriptą. Ko gero, ilgokai to nebūčiau pastebėjęs (ps aux nerodė nieko neįprasto), jei ne padidėjęs serverio ‘loadai’. Štai čia į pagalbą atėjo Apache ‘logai’. Panagrinėjęs juos, suradau ir pašalinau scriptą. Daugelis laiškų nepasiekė adresato (mano serverio vardas nesutampa su jo adresu, todėl natūralu, kad jo nepripažino gavėjų serveriai.). Todėl leisiu sau įtraukti čia

4. Scriptų vykdymo laikas ir atminties išskyrimas.
Kiekvienam vykdomam PHP/PERL scriptui derėtų riboti vykdymo laiką (taip apsisaugosite nuo IRC botų paleidimo jūsų serveryje, bei panašių ‘backgrounde’ veikiančių PHP/PERL programų.)

Po viso šito, išsiaiškinus, kas tai padarė ir paviešinus šį faktą, mano serverį užlūdo DDoS ataka. Kaip nuo jos apsiginti, aprašiau ankstesniame įraše, tačiau nepaminėjau kai kurių pakeitimų Apache ir mySQLd serverių konfigūracijose (neskaitant PHP scriptų vykdymo laiko ir atminties sumažinimo).

5. Apache MaxClients ir mySQL max_connections nustatymų suderinimas pagal realius serverio poreikius.
Pas mane buvo ‘default’, taigi, Apache serveris leido jungtis 150 kompiuterių, nors realiai tiek aptarnaut negalėjo. Tad, sumažinau iki realaus skaičiaus pagal maksimalią įmanomą serveriui. Mano atveju tai buvo 30 (mažai lankosi, prisipažinsiu), todėl net ir agresyviausia DDoS ataka neužlauždavo sistemos, Apache atlaikydavo šią apkrovą, scriptų vykdymas nutrūkdavo dėl vykdymo laiko limitavimo, atminties nepritrūko (to mes ir siekėme, ar ne?)

6. Duomenų bazių kopijos.
Daugelyje hostingo kompanijų, už kopijos suteikimą reikia papildomai mokėti. Tai natūralu, jei vartotojas tuo nepasirūpina, vadinasi, gali už tai sumokėti. Mano serveryje kopijos automatiškai daromos kas 12 valandų. Jos yra prieinamos TIK man, ir joks įsilaužėlis prie jų neprieis (nebent gautų root teises).

7. Ir į paskutinę vietą pastatysiu drwxr-xr-x /home bei /home/user bei drwxrwxrwxt /tmp /var/tmp CHMOD’us..
Gerbiamieji administratoriai, bei serverių turėtojai, taip jūs atveriate visus vartotojų katalogus skaitymui tiesiog bet kam… drwx–x–x - štai toks CHMOD’as tenkina ir mane, ir vartotojus ir net priekabųjį suPHP/cgi-php. Bent jau pas mane puikiai pasiteisino. O /tmp ir /var/tmp, suteikti yra drwx-wx-wt CHMOD. Ir vėl gi - ir man gerai, ir serveris nesispjaudo. O svarbiausia:
eil@capricorn:/home$ ls -lia
ls: .: Permission denied
ir
eil@capricorn:/$ ls -lia /tmp
ls: /tmp: Permission denied

Valio, dabar niekas nematys, kokią pornografiją laikau pas save homedir’e ;)

Tai tiek šiandien mano blevyzgų apie saugumą. Komentarai visada laukiami.

Keisti faktai iš DDoS istorijos

November 19th, 2007

Taigi, pradėjus savarankišką tyrimą ir susisiekus su keliais iš DDoS dalyvavusių kompiuterių savininkais, paaiškėjo, kad jie kažkada lankėsi cyberlords.lt svetainėje. Taigi, išvados tokios - cyberlords.lt ‘dievas’ KING pasinaudodamas savo forumo lankytojų patiklumu, sugebėjo kai kuriems iš jų užkrėst kompiuterius… Štai taip. Vaikai, toliau siųskitės viską, ką jis siūlo, jūsų kompiuteriai bus panaudoti ‘pagal paskirtį’. Naivuolių banda… Jei staiga sulėtės jūsų internetas, klauskite pas savo ‘idėjinį’ vadą… Velniop tuos kiberliurbius, savi saviems ant galvų šika. Perkas gerkles patys sau. O aš geriau atsigersiu alaus ir ramiai pažiūrėsiu ‘teliką’.

Adios amigos.

CyberLords

Beje, pasitikrinkite, ar nesate viena iš ‘aukų’: http://www.vipnight.net/blacklist.txt

Kadangi šis postas pritraukė daug kiberliurbijos dėmėsio, galiu pakomentuot Domestos nebijančių parazitų žodžius:
Kievienas save gerbiantis tinklapio administratorius PRIVALO tikrinti, ar jame talpinama informacija NĖRA KENKSMINGA, o ne sakyt: “ne mano bėdos”. Tai taip, vaikai dažnai pamiršta atsargumą… Beje, aš nesu hackeris ;) Taip kad apie mane legendų kurt nereikia. O visi tie kažkokie “bandymai” tėra jūsų pačių fantazijos arba paranojos vaisius… Thats all. See you on the street.

Išėjo nauja Skylė TV laida, jau 6-oji!

November 17th, 2007

 Taigi, vasarai pasibaigus ir į kiemą atsibeldus žiemai, buvo išleista Skylė TV 6-oji laida. Joje, kaip visada, gausu sveiko ir nesveiko jumoro, įvairių laidų parodijų ir net tradicija tapusios Experto bei Orų rubrikėlės.

Pasižiūrėjau pats ir pasakysiu atvirai - patiko :) Ko gero, net labiau už prieš tai buvusias laidas.  Rekomenduoju parsisiųst ir pasižiūrėt :)

O siųstis reikia iš jau, ko gero, oficialaus šio projekto puslapio: www.skyle.tv

DDoS atrėmimo taktikos

November 16th, 2007

Pirmoji, kurią ir naudojau, tai buvo toks bash’o scriptukas:

netstat -an | grep 86.100.70.192:80 | grep SYN_RECV | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq | xargs -n 1 -I “{}” iptables -A INPUT -s “{}” -j DROP | killall /usr/sbin/apache2 | /etc/init.d/apache2 restart

netstat -an - išveda visus susijungimus;
grep 86.100.70.192:80 - atrenkame susijungimus su mūsų IP 80 portu;
grep SYN_RECV - atrenkame pradėtas sesijas;
awk ‘{print $5}’ - išvedame 5-ą ląstelę, t.y. nutolusios mašinos IP adresą ir portą;
cut -d: -f1 - daliname gautą reikšme IP:PORT į dvi dalis per :, ir naudojame pirmąją dalį (IP);
sort - surikiuojame;
uniq - atrenkame unikalius IP adresus;
xargs -n 1 -I “{}” iptables -A INPUT -s “{}” -j DROP - įtraukiame atrinktus IP į ugniasienės taisykles;
killall /usr/sbin/apache2 - ‘nužudome’ visus apache2 procesus (tuo pačiu nutraukiame susijungimus);
/etc/init.d/apache2 restart - inicijuojame apache2 paleidimą.

Antras metodas, kuris yra efektyvesnis, bet tinka tik su ugniasienėmis, kurios moka atrinkt unikalias taisykles, kad jos nesikartotų:

tcpdump -n ‘tcp port 80 and ip[2:2] < 62′ | awk ‘{print $3}’ | cut -d . -f 1-4

tcpdump -n ‘tcp port 80 and ip[2:2] < 62′ - naudojamės tcpdump įrankiu (kuris paketus gauna dar prieš ugniasienę ir apache serverį), -n - neverčiame IP adresų į raidinę verte. port 80 - atrenkame paketus siunčiamus į 80 portą. and ip[2:2] - gauname paketo dydį, < 62 ir pasiimame tik tuos, kurie mažesni už 62 baitus (tuščia užklausa).
awk ‘{print $3}’ - išvedame 3-ąją eilutės ląstelę;
cut -d . -f 1-4 - kadangi išvesta ląstelė yra ipsegmentas.ipsegmentas.ipsegmentas.ipsegmentas.portas, tai padaliname ląstelę per taškus (-d.) ir pasirenkame nuo 1 iki 4 segmento (-f 1-4). Dabar gautą ip adresą galima perduoti ugniasienei ar įrašyti į failą.