Elementari serverio sauga

Š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.

Leave a Reply

You must be logged in to post a comment.