Zaščita strežnika pred vdori. Katera koli različica Celovita zaščita pred napadi (OOG in drugi) Redno nameščajte najnovejše posodobitve

Nemogoče je enkrat za vselej zaščititi strežnik pred zunanjim dostopom, saj se vsak dan odkrijejo nove ranljivosti in pojavijo se novi načini za vdor v strežnik. V tem članku bomo govorili o zaščiti strežnikov pred nepooblaščenim dostopom.

Strežniki katerega koli podjetja lahko prej ali slej postanejo tarča vdorov ali napadov virusov. Običajno je rezultat takšnega napada izguba podatkov, ugled ali finančna škoda, zato je treba vprašanjem varnosti strežnika nameniti prednost.

Treba je razumeti, da je zaščita pred vdorom v strežnik niz ukrepov, vključno s stalnim spremljanjem delovanja strežnika in delom za izboljšanje zaščite. Nemogoče je enkrat za vselej zaščititi strežnik pred zunanjim dostopom, saj se vsak dan odkrijejo nove ranljivosti in pojavijo se novi načini za vdor v strežnik.

V tem članku bomo govorili o zaščiti strežnikov pred nepooblaščenim dostopom.

Načini in metode zaščite strežnikov pred nepooblaščenim dostopom

Fizično varovanje strežnika

Fizično varovanje. Priporočljivo je, da se strežnik nahaja v varnem podatkovnem centru, v zaprtem in varovanem prostoru ne smejo imeti dostopa do strežnika.

Nastavite avtentikacijo SSH

Pri nastavitvi dostopa do strežnika namesto gesla uporabite avtentikacijo ključa SSH, saj je takšne ključe veliko težje in včasih preprosto nemogoče vdreti s surovo silo.

Če menite, da še vedno potrebujete geslo, omejite število poskusov vnosa.

Prosimo, upoštevajte, če vidite takšno sporočilo, ko se prijavite:

Zadnja neuspešna prijava: torek, 28. september, 12:42:35 MSK 2017 z 52.15.194.10 na ssh:notty
Od zadnje uspešne prijave je bilo 8243 neuspelih poskusov prijave.

Morda pomeni, da je nekdo poskušal vdreti v vaš strežnik. V tem primeru za konfiguracijo varnosti strežnika spremenite vrata SSH, omejite seznam IP-jev, s katerih je možen dostop do strežnika, ali namestite programsko opremo, ki samodejno blokira prepogosto in sumljivo dejavnost.

Redno nameščajte najnovejše posodobitve

Za zagotovitev zaščite strežnika nemudoma namestite najnovejše popravke in posodobitve za strežniško programsko opremo, ki jo uporabljate – operacijski sistem, hipervizor, strežnik baz podatkov.

Priporočljivo je, da vsak dan preverite, ali obstajajo novi popravki, posodobitve in poročila o napakah/ranljivostih, da preprečite napade, ki izkoriščajo ranljivosti ničelnega dne. Če želite to narediti, se naročite na novice podjetja za razvoj programske opreme, sledite njegovim stranem v družbenih omrežjih.

Zaščitite svoja gesla

Do zdaj je bil eden najpogostejših načinov za dostop do strežnika vdiranje v geslo strežnika. Zato upoštevajte dobro znana, a kljub temu ustrezna priporočila, da strežnika ne pustite nezaščitenega:

  • Ne uporabljajte gesel, ki jih je enostavno uganiti, kot je ime vašega podjetja;
  • če še vedno uporabljate privzeto geslo za skrbniško konzolo, ga takoj spremenite;
  • gesla za različne storitve mora biti drugačen;
  • če morate nekomu dati geslo, nikoli ne pošiljajte naslova IP, prijave in gesla v istem e-poštnem sporočilu ali sporočilu Messengerja;
  • Za prijavo v skrbniški račun lahko nastavite dvostopenjsko avtentikacijo.

Požarni zid

  • Prepričajte se, da ima strežnik , da je konfiguriran in da ves čas deluje.
  • Zavarujte dohodni in odhodni promet.
  • Spremljajte, katera vrata so odprta in za kakšne namene, ne odpirajte ničesar nepotrebnega, da zmanjšate število možnih ranljivosti za vdor v strežnik.

Zlasti požarni zid je zelo koristen pri zaščiti strežnika pred ddos napadi, ker lahko hitro ustvarite prepovedana pravila požarnega zidu in dodate naslove IP, s katerih prihaja napad, ali blokirate dostop do določenih aplikacij z uporabo določenih protokolov.

Nadzor in odkrivanje vdorov

  • Omejite programsko opremo in storitve, ki se izvajajo na vašem strežniku. Občasno preverite vse, kar imate zagnano, in če najdete kakršne koli procese, ki vam niso znani, jih takoj izbrišite in začnite skenirati za viruse.
  • Redno preverjajte znake poseganja. Nove informacije lahko kažejo na vdor računi uporabniki, ki jih niste ustvarili, premikanje ali brisanje datoteke /etc/syslog.conf, izbrisane datoteke/etc/shadow in /etc/geslo.
  • Spremljajte delovanje strežnika, si oglejte njegovo običajno hitrost in prepustnost, tako da lahko opazite odstopanja, na primer, ko je obremenitev strežnika postala bistveno večja kot običajno.

Uporaba VPN in šifriranja SSL/TLS

Če je potrebno oddaljeni dostop na strežnik, mora biti dovoljen samo z določenih naslovov IP in se zgoditi prek VPN-ja.

Naslednji korak pri zagotavljanju varnosti bi lahko bila nastavitev SSL, ki vam bo omogočila ne le šifriranje podatkov, ampak tudi preverjanje identitete drugih udeležencev v omrežni infrastrukturi, ki jim izdaja ustrezne certifikate.

Varnostni pregled strežnika

Dobro bi bilo samostojno preveriti varnost strežnika z metodo pentest, tj. modeliranje napadov za iskanje potencialnih ranljivosti in njihovo pravočasno odpravo. V ta namen je priporočljivo vključiti strokovnjake informacijska varnost, nekatere teste pa je mogoče opraviti neodvisno, z uporabo programov za vdiranje v strežnike.

Kaj še ogroža strežnike poleg vdorov?

Strežnik lahko odpove iz več razlogov, ki niso vdori. To je lahko na primer okužba z zlonamerno programsko opremo ali preprosto fizična okvara katere koli komponente.

Zato morajo ukrepi za zaščito strežnika vključevati:

  • Namestitev in posodabljanje programov za zaščito strežnika - antivirusi.
  • Redno šifrirano kopiranje podatkov, vsaj enkrat tedensko, saj so po statistiki strežniški trdi diski na prvem mestu po pogostosti okvar. Prepričajte se varnostno kopiranje shranjeni v fizično varnem okolju.
  • Zagotavljanje neprekinjenega napajanja strežniške sobe.
  • Pravočasna fizična preventiva strežnikov, vključno s čiščenjem pred prahom in zamenjavo termalne paste.

Izkušnje Integrusovih strokovnjakov nam povedo, da je najboljša zaščita pred tovrstnimi grožnjami uporaba najboljših praks na področju sistemov za zaščito strežnikov.

Za zagotavljanje varnosti strežnikov naših strank uporabljamo kombinacijo orodij: požarne zidove, protivirusne programe, tehnologije za varnost/upravljanje dogodkov (SIM/SEM), tehnologije za zaznavanje/zaščito vdorov (IDS/IPS), tehnologije za analizo vedenja omrežja (NBA). , seveda redno preventivno vzdrževanje strežnikov in ureditev varovanih strežniških sob na ključ. To vam omogoča, da zmanjšate tveganje vdora ali okvare strežnika iz drugih razlogov na minimum.

Pripravljeni smo izvesti varnostni pregled strežnikov vašega podjetja, se posvetovati s strokovnjaki in opraviti vse vrste del za vzpostavitev zaščite strežniške opreme.

Pozdravljeni vsi iz ekipe UNITWAY PW. S to temo želimo prikazati odsotnost nelojalne konkurence z naše strani in odsotnost črne, grde, lažne konkurence s strani projekta NewDestiny.

Tukaj je seznam rešitev za napade, ki so jih kdaj uporabili skrbniki NewDestiny loko9988, TyrikMan (včerajšnji OOG napad je bil z naslova IP Yoshkar Ola), Killer_Pooh (zabeležen je bil tudi napad iz mesta Volzhsky). Poleg napadov na nas smo prejeli informacije o napadu na številne druge strežnike, ki so bili povezani z našim odkritjem. Z objavo številnih popravkov teh napadov dokazujemo, da nismo vpleteni v napade na kogar koli, kljub očitno zaskrbljenemu stališču administratorja Zzebra PW (mirthost) glede našega projekta. Prav nič ne zamerimo vsem, ki so nasedli rumenemu članku o nas, vsak ima svojo glavo na ramenih.


In to je le del njihovih računov.

Eden od razlogov za objavo te teme so bile govorice, ki so prišle do nas. Bistvo teh govoric je, da loko9988 ne napada strežnikov samo zaradi konkurence, ampak tudi zato, da bi preko njega ponudil zaščito teh strežnikov.

Zaščita pred napadi OOG na podlagi iptables:
Najprej ustvarimo skriptirana pravila požarnega zidu, lahko jih imenujete kakor koli želite.

iptables -A INPUT -p tcp -m multiport --dports 29000 -m length --length 500:65535 -j LOG --log-predpona "PW"

Kliknite za razširitev ...

S tem pravilom posnamemo vse pakete iger iz vrat 29000 z velikostmi od 500 do 65535 bajtov.

iptables -A INPUT -p tcp -m multiport --dports 29000 -m length --length 500:65535 -m recent --name packets --set
iptables -A INPUT -p tcp -m multiport --dports 29000 -m length --length 500:65535 -m recent --name packets --update --seconds 1 --hitcount 100 -j REJECT

Kliknite za razširitev ...

S temi pravili blokiramo uporabnika, če je strežnik od njega prejel več kot 100 paketov velikosti 500 - 65535 bajtov v 1 sekundi na vratih 29000 (igra).

iptables -A INPUT -p tcp -m multiport --dports 29000 -m length --length SIZE -m recent --name packet1 --set
iptables -A INPUT -p tcp -m multiport --dports 29000 -m length --length SIZE -m recent --name packet1 --update --seconds 15 --hitcount 3 -j REJECT

Kliknite za razširitev ...

S temi pravili blokiramo uporabnike, ki so poslali več kot 3 pakete v 15 sekundah na vrata 29000. SIZE - velikost paketa v bajtih.
Kako slediti velikosti paketa v bajtih?
Po prvem pravilu, kjer beležimo vse pakete iger, si jih lahko ogledate v datoteki /var/log/syslog ali ekipa dmesg v konzoli strežnika.
Ko pride do napada v sistemskem dnevniku, bo v kratkem času veliko enakih paketov.

PW IN=ipip1 OUT= MAC= SRC= IP NASLOV UPORABNIKA DST=*.*.*.* LEN=547 TOS=0x00 PREC=0x00 TTL=241 ID=13328 DF PROTO=TCP SPT=22511 DPT=63947 WINDOW=254 RES=0x00 ACK PSH URGP=0

Kliknite za razširitev ...

V zgornjem primeru je velikost paketa "LEN=547".

Uredili smo OOG zaščito. Pojdimo na druge načine tekmovanja NewDestiny.
Surovi računi. Tukaj je vse popolnoma preprosto:
#blokiraj prijavo na silo

iptables -A INPUT -p tcp -m multiport --dports 29000 -m conntrack --ctstate NOVO -m recent --name brute --set
iptables -A INPUT -p tcp -m multiport --dports 29000 -m conntrack --ctstate NEW -m recent --name brute --update --seconds 30 --hitcount 3 -j REJECT

Kliknite za razširitev ...

S tem pravilom blokiramo IP uporabnika za 30 sekund, če je podal več kot 3 zahteve za povezavo na vrata 29000.
  • Naredi popolno omejitev vrat, razen igralnih prek iptables.
  • Povežite se s strežnikom s ključem (ključi) ssh s kodno besedo.
  • Uporaba najnovejše različice mysql, apache2 in drugi pomembni paketi.
  • Po nalaganju prek OOG uporabite logrotate, sicer ko varnostno kopiranje brlogi RAM Vaš strežnik bo v celoti izkoriščen. To lahko povzroči vdor.
  • Na igralnem strežniku ne uporabljajte programske opreme tretjih oseb.
  • Uporabite filter gesel igralca po meri. V samo nekaj urah je bilo pri naši prijavi več kot 50.000 neveljavnih poskusov avtorizacije. 30 % naših igralcev je imelo enake prijave iz teh parov prijava-geslo.
Raje imamo pošteno konkurenco, nimamo časa ali dodatnih financ za napad. Ne zajebavaj se s temi ljudmi, lahko se slabo konča.

Večina programov mora komunicirati z uporabnikom tako, da vnese določene podatke, pa naj bo to polno ime, višina, teža, ki jih je treba vnesti v bazo podatkov, ali geometrijske dimenzije nekega predmeta, za katerega je treba nekaj izračunati. Vse te podatke vnese uporabnik – oseba, kar pomeni, da lahko v odgovor pride karkoli. Kaj bo izpisal program, če ga uporabnik namesto zahtevane starosti zapiše z besedami? Najverjetneje se bo program zrušil ali zamrznil, vendar ne, če ima "zaščito pred norci".

Zakaj se lahko program zruši ali zamrzne? Program bo nabor znakov poskušal pretvoriti v število, kar pa ne bo mogoče, kar pomeni, da nadaljnje delovanje aplikacije ni definirano. Zato je zelo pomembno strukturo programa organizirati tako, da ob vstopu nepričakovano za podatkovni program (nepravilno z vidika zahtevane oblike: potrebna je številka, vnesena pa je beseda), se aplikacija ni zrušila, ampak je uporabnika obvestila, da je prišlo do napake in zahtevala ponovitev vnosa. To je "dokaz za bedaka".

Implementacija zaščite pred napakami v C

Za izvedbo dobre zaščite pred napakami pri vnosu različnih številskih (int, double...) podatkov ni treba prebrati samih števil, temveč celoten vhodni niz in šele nato analizirati vnos. Jezik C ima zelo dobro funkcijo sscanf(const char *, const char *, args) , ki deluje podobno kot funkcija scanf(const char *, args) in vrne število uspešno prebranih argumentov, le podatki se ne berejo iz standardnega vhodnega toka, ampak iz niza, ki mu je bil posredovan kot prvi argument.

Oglejmo si nekaj primerov funkcij, ki izvajajo zaščito pred napakami s funkcijo sscanf.

Vnos celega števila s preverjanjem napačnega vnosa

int get_integer(const char *msg) ( char odgovor; // vrstica za branje int n; // končno celo število printf("%s", msg); // prikaz poziva fgets(odgovor, sizeof(odgovor), stdin); // preberi vrstico // dokler ni prebrano celo število while (sscanf(answer, "%d", &n) != 1) ( printf("Nepravilen vnos. Poskusi znova: "); // natisni sporočilo o napaki fgets (odgovor, sizeof(odgovor), stdin); // in ponovno preberite vrstico return n; // vrnite pravilno celo število)

Za branje celega števila algoritem prebere celoten niz in nato poskuša iz njega pridobiti celo število. Če to ne uspe, funkcija prikaže sporočilo o napaki in vas prosi, da ponavljate vnos, dokler ne vnesete pravilne vrednosti celega števila.

Vnos realnega števila s preverjanjem napačnega vnosa

double get_double(const char *msg) ( char odgovor; // vrstica za branje dvojnega x; // končno realno število printf("%s", msg); // prikaz vnosnega poziva fgets(odgovor, sizeof(odgovor), stdin); // preberi vrstico // dokler ni prebrano realno število, medtem ko (sscanf(odgovor, "%lf", &x) != 1) ( printf("Napačen vnos. Poskusi znova: "); // natisni sporočilo o napaki fgets(answer, sizeof(answer), stdin); // in ponovno preberite vrstico; vrnite pravilno realno število)

Vnos točke na koordinatno ravnino (struktura z dvema realnima poljema)

// opis podatkovne strukture typedef struct point_t ( dvojni x; // x koordinata dvojni y; // y koordinata ) point_t; point_t get_point(const char *msg) ( char answer; // vrstica za branje point_t point; // končna točka printf("%s", msg); // prikaz vnosnega poziva fgets(answer, sizeof(answer), stdin ); // branje vrstice // dokler se ne prebereta obe koordinati točke while (sscanf(odgovor, "(%lf,%lf)", &point.x, &point.y) != 2) ( printf("Nepravilen vnos. Poskusi znova: "); // prikaže sporočilo o napaki fgets(answer, sizeof(answer), stdin); // in znova preberi vrstico) vrni točko; // vrni pravilno točko)

Kot je razvidno iz primerov, funkcija funkcije sscanf, ki vrne število prebranih argumentov, omogoča nadzor nad pravilnostjo vnesenih podatkov v podanem formatu, branje celotne vrstice pa ščiti pred dejstvom, da presledki ali prelomi vrstic »\n« bo ostal v vhodnem toku, kar vas zelo pogosto prisili v zapravljanje. Ne potrebujete ene ure ali celo dneva, da odkrijete napako.

Pregled