You are on page 1of 7

Viša elektrotehnička škola u Beogradu

Vojvode Stepe 283.


www.vets.edu.yu

Seminarski rad

student: Igor
Popov
predmet: Sigurnost u računarskim mrežama
tema: Poboljšanje sigurnosti web aplikacije phpBB

ABSTRAKT
phpBB forum je u skoroj verziji 2.0.21 ispravio mnoge primećene sigurnosne propuste koje su bile često
zloupotrebljavane, zahvaljujući rasprostranjenosti aplikacije. Aspekt koji nije u dovoljnoj meri pokriven do
sada jeste prenos i čuvanje šifri registrovanih korisnika. Trenutno rešenje za smeštanje šifri u bazu, umesto
originalnog sadržaja, primenjuje na njega hash algoritam md5, ali se na tome priča i završava.
U transportu od klijenta do servera šifra putuje u čistom obliku podložna pasivnim napadima, što je
neprihvatljiva situacija. Možda sama pomenuta aplikacija nema toliko važnu ulogu da bi briga oko zaštite
identiteta imala veliki prioritet, ali sama činjenica da korisnici Internet usluga često za šifre raznih sistema
koriste iste/slične podatke, nameće obavezu svakom davaocu usluga da te podatke i zaštiti, kako u transportu,
tako i pri čuvanju na serveru.

CILJ
Ovaj seminarski rad se bavi mogućim rešenjem sigurnosnih nedostataka phpBB aplikacije kroz kombinovanu
primenu enkripcije, hmac i hash algoritama. Problem je razložen na nezavisne celine i svakoj je ponuđen
prigodan metod zaštite u kontekstu ove aplikacije. Uočene celine su: registracija, logovanje, promena šifre,
izgubljena šifra i automatsko logovanje.

ZADACI
Prilikom razmatranja pojedinih celina i njihovih predloženih sigurnosnih unapređenja, treba voditi računa o
nekoliko činjenica vezanih za sam phpBB.
Organizacija koda aplikacije je takva da se pravljenje dodataka, odnosno MODova (od Modifications), svodi na
pravljenje fajla koji opisuje izmene u kodu, odnosno search and add or replace informacije. Ovakva
organizacija otežava kompleksnije izmene, tako da je poželjno promene koda pojednostaviti i sam njihov broj
maksimalno smanjiti. Rezultat ovog seminarskog bi trebao da bude jedan takav MOD koji bi se mogao
primeniti na bilo kojoj instalaciji phpBB foruma.
Kao što je već pomenuto, trenutno se šifra korisnika u bazi na serveru čuva kao md5 hash. Ovo je moguće
unaprediti, ali za sada se ostaje na tome, jer bi promena podataka ovog tipa uticala na upotrebljivost MODa,
kao i na kompatibilnost sa drugima. Moguće unapređenje bi bila upotreba hmac algoritma sa vrednošću ključa
jedinstvenim za svakog korisnika, kao i za konkretnu instalaciju aplikacije takođe. Ovo bi onemogućilo
portabilnost hash-a šifre između različitih sistema, što predstavlja moguće mesto zloupotrebe.
Aplikacija omogućuje vizuelnu konfirmaciju prilikom registracije što pruža kanal za siguran prenos podataka
od servera ka klijentu.
Viša elektrotehnička škola u Beogradu
Vojvode Stepe 283.
www.vets.edu.yu
Registracija
Prilikom registracije se šifra korisnika prvi put pominje i mora se preneti do servera radi uskladištavanja.
Trenutno se ona prenosi u originalnom obliku, što je neprihvatljivo. Viši nivo sigurnosti bi bio slanje hash-a, ali
i sam hash je potrebno sačuvati od pasivnog napada, jer se i on može zloupotrebiti, bez znanja o samoj šifri
koju predstavlja.
Za siguran prenos podataka do servera je potrebno koristiti enkripciju, što omogućava pomenuta vizuelna
konfirmacija, koja bi se mogla koristiti i kao metod razmene ključa.
Rešenje je da se postojeći kod za vizuelnu konfirmaciju iskoristi kao ključ za enkripciju šifre (korišćeni
algoritam za enkripciju je Blowfish). Polja forme za šifru i potvrdu šifre se zamenjuju enkriptovanim
vrednostima md5 hash-a samih šifri upotrebom JavaScript-a prethodno slanju. Pomeranjem primene hash
funkcije sa servera na klijenta, šifra se u potpunosti sakriva i od servera, odnosno osoba sa pristupom istom.
Ovakva upotreba koda za konfirmaciju zahteva njegovu zaštitu prilikom slanja serveru na proveru. Koristi se
hmac-sha1 algoritam sa ključem generisanim na serveru za potrebe svih hmac operacija kroz skriveno polje
forme - challenge polje.
Sumirano ukratko, za potrebu registracije: server šalje kod za vizuelnu konfirmaciju i challenge podatak, a
klijent vraća enkriptovan md5 šifre i potvrde šifre i hmac-sha1 koda. Na serveru se preneta enkriptovana šifra
dekriptuje i, nakon provere koda, smešta u bazu kao md5 vrednost šifre.
Viša elektrotehnička škola u Beogradu
Vojvode Stepe 283.
www.vets.edu.yu
Logovanje
Postupak prijave na forum je mnogo jednostavnija operacija od registracije, jer nema potrebe za enkripcijom i
samim tim ni za prenosom ključa. Potrebno je samo primeniti odgovarajuću kombinaciju hmac, sha1 i md5
algoritama da bi se postigao zadovoljavajući stepen sigurnosti.
Pošto server ima informaciju jedino o md5 hash-u šifre, mora se isti generisati i na klijentu prethodno slanju.
Koristeći JavaScript uneta šifra se zamenjuje vrednošću dobijenom primenom hmac-sha1 algoritma nad
podatkom koji je pomenuti md5 hash unete šifre. Za ključ hmac-a se koristi challenge vrednost dobijena od
servera što omogućava da se svaki put za istog korisnika sa nepromenjenom šifrom šalju različiti podaci. Na
serveru se dobijena šifra proverava primenom identičnih algoritama nad podatkom za šifru u bazi.

Promena šifre
Prilikom promene šifre imamo isti problem kao i prilikom registracije, odnosno, neophodno je preneti md5 šifre
do servera sigurnim putem. Za ovu akciju u aplikaciji nije predviđena upotreba vizualne konfirmacije, tako da
identično rešenje nije moguće, ali slično jeste. Umesto korišćenog koda kao ključa za enkripciju, koristiće se
stara šifra koja se želi menjati.
Ovako imamo sledeće podatke. Server šalje challenge, a klijent istim postupkom kao pri logovanju štiti staru
šifru, a novu šifru i njenu potvrdu šifruje kao i prilikom registracije, pri čemu za ključ koristi staru šifru.
Viša elektrotehnička škola u Beogradu
Vojvode Stepe 283.
www.vets.edu.yu

Izgubljena šifra
U situaciji kada je korisnik izgubio šifru, omogućeno je automatsko generisanje nove i slanje obaveštenja na
mail. U mailu se šifra navodi u originalnom obliku, što predstavlja potencijalno problem, ali ne vidim način da
se ovo poboljša. Rizik dovoljno smanjuje činjenica da se ove šifre najčešće koriste samo za prvo sledeće
logovanje, nakon čega korisnik menja šifru.

Administratorsko menjanje šifre


Postoji mogućnost da administrator foruma korisniku promeni šifru. Za ovakvu situaciju ne postoji
većraspoloživa tajna informacija kojom bi se vršila enkripcija. Iz ovog razloga, a i iz procene rizika sličnoj kao
kod slučaja izgubljene šifre, se koristi obično hmac-sha1 heširanje pomoću challenge podatka sa servera.
Viša elektrotehnička škola u Beogradu
Vojvode Stepe 283.
www.vets.edu.yu

Automatsko logovanje
Pomoću cookie-a je omogućeno produženo trajanje sesije što otvara mogućnost preuzimanja identiteta na
osnovu zabeležene identifikacije sesije. Ovu oblast još nisam dovoljno istražio da bih znao da li je potrebno
poboljšanje i ako jeste - u kom stepenu i koje metode pri tome koristiti.

MANE REŠENJA
Prilikom šifrovanja podataka Blowfish algoritmom korišćen je kod za vizuelnu konfirmaciju. Dužina koda je
poznata i sastoji se od šest karaktera koji mogu biti velika slova i brojevi. Primena brute force metode je
uspešnija za kraće šifre, tako da je ovo potencijalna mana. Činjenica da se šifrovanje koristi retko, odnosno
jedino prilikom registracije i prilikom promene šifre, i činjenica da bi se i u slučaju razbijanja šifre došlo do
md5 hash-a, a ne same šifre, smanjuju potencijalnu štetu ovog nedostatka.
U bazi se šifre čuvaju u md5 obliku, što je dobro, ali ne i najbolje. Viši nivo sigurnosti bi pružilo čuvanje šifre
propuštene kroz hmac-sha1 algoritam sa ključem jedinstvenim za svakog korisnika. Ovakva promena aplikacije
je spomenuta, kao i argument protiv njene primene (primenljivost, kompatibilnost).
Naravno, pošto je ovde izložen sistem sigurnosti sa klijentske strane zasnovan na JavaScript funkcijama,
podložan je aktivnim napadima koji bi ovakve skripte, ili i sam html, menjali i omogućili pristup korisnički
unetim podacima. Zaštita od aktivnih napada i nije tema ovog seminarskog.

IMPLEMENTACIJA
phpBB forum pruža specijalan način update-a aplikacije pomoću EasyMOD modula. U suštini ovaj modul
procesira MOD fajlove i na osnovu protumačenih instrukcija radi osnovni „search and replace“ kroz php
fajlove. Ovakva organizacija proširivosti aplikacije je dosta nefleksibilna, tako da se mora detaljno testirati
kompatibilnost novonapravljenog MODa, kako sa različitim verzijama samog foruma, tako i sa drugim
popularnim MODovima, a sve u cilju izbegavanja konflikata pri promeni koda.
Viša elektrotehnička škola u Beogradu
Vojvode Stepe 283.
www.vets.edu.yu
Sa ovim u vidu odluka da se za potrebe ovog seminarskog isproba kompatibilnost samo sa najnovijom verzijom
foruma (phpBB 2.0.21) zvuči realnije, dok bi se za eventualno „ozvaničenje“ koda moralo pristupiti što širem
testiranju.

Razvoj test aplikacije


Prvi korak u implementaciji je bio rad na test aplikaciji koja bi verifikovala validnost algoritama u upotrebi
kroz klijentsko-serversku komunikaciju. Na klijentu su algoritmi urađeni pomoću JavaScript koda koji pri
submit-u forme obrađuje unete podatke, štiti ih i šalje dalje serveru na obradu. PHP kod na serveru pokriva
nešto uži skup algoritama, jer je deo problematike već ugrađeni u sam jezik.
Iako je kod za algoritme preuzet sa Interneta (pogledati reference), bilo je potrebna modifikacija usled
nekompatiblinosti dva rešenja - JavaScript i PHP, iako su navedena rešenja navela da poštuju algoritme
propisane standardima. Nekompatibilnost se ogledala, konkretno, u algoritmu za padding podataka kako bi se
uklopio u blokove od 64 bita. Jedan pristup je dodavanje nula na kraj, što može dovesti do gubljenja podataka,
ako se podatak pre paddinga završavao nulom. Drugo rešenje je da se ostatak popuni brojem koji predstavlja
broj potrebnih bajtova do zatvaranja poslednjeg bloka. Algoritmi su prilagođeni da rade u skladu sa drugim
rešenjem.

Prilagođavanje koda foruma


S obzirom na pomenutu nefleksibilnost aplikacije na izmene, ovom koraku se moralo pažljivo prići, birajući
najmanje osetljivo mesto za unos potrebnih izmena. Za svaki od navedenih zadataka je pregledom koda
locirano takvo mesto i izmene, već istestirane u prvom koraku, unete.

Izrada MODa na osnovu izmena


Sam MOD je tekstualni fajl u skladu sa javno dostupnom specifikacijom. U njemu se navode akcije koje
mehanizam za update treba da preduzme, od kojih su osnovne Copy, Open i Find. Copy akcija nalaže da se
fajlovi dostavljeni sa samim MODom prekopiraju u aktivne phpBB direktorijume. Open akcijom se aktivira
postojeći aktivni fajl foruma i sprema se da se nad njim vrše izmene. Find akcija prati Open i locira željeni deo
koda unutar aktivnog fajla. Nakon uspešnog lociranja su na raspolaganju razne akcije za dodavanje koda,
izmenu, preciznije pretraživanje, itd.
Osim navedene mogućnosti da MOD bude običan tekstualni fajl, moguće je koristiti i XML format za
reprezentaciju, koji osim veće preciznosti i olakšane verifikacije omogućava i vizualni pregled MODa u
čitljivijem obliku pomoću raspoložive XSL transformacije i upotrebe browser-a.

Ograničena funkcionalnost u trenutnoj verziji


U drugom koraku implementacije, prilagođavanju koda forumu, je postavljena granicu prve verzije tako što nije
podržana logika iza challenge vrednosti. Ova vrednost omogućava da jedna ista šifra putem hmac-sha1
algoritma dobija različite vrednosti svaki put kada se korisnik loguje, što dalje omogućava dinamičnost hash-a i
dodatno odbranu od pasivnog napada. Iako ovaj aspekt sigurnosti nije podržan, on ne utiče na funkcionalnost
ostale zaštite.
Viša elektrotehnička škola u Beogradu
Vojvode Stepe 283.
www.vets.edu.yu

ZAKLJUČAK
Izneti predlog zaštite identiteta korisnika phpBB aplikacije je zasnovan na poznatim i kroz standarde
prihvaćenim algoritmima. Zaštita zahteva manje promene postojećeg koda i dodavanje koda za podršku
korišćenim algoritmima na klijentskoj strani kroz JavaScript funkcije i na serverskoj kroz PHP klase. Dobitak je
veći stepen sigurnosti pri korišćenju aplikacije i primena ovakvog ili sličnog rešenja je izuzetno poželjna u svim
sistemima koji nisu u mogućnosti da koriste neki od sigurnosnih protokola za komunikaciju Internet-om.

REFERENCE
1. Blowfish enkripcija, JavaScript, http://www.farfarfar.com/scripts/encrypt/encrypt.js,
2. MD5 hash, JavaScript, http://pajhome.org.uk/crypt/md5/md5.js,
3. SHA1 hash, JavaScript, http://pajhome.org.uk/crypt/md5/sha1.js,
4. HMAC algoritam, RFC 2104, http://www.ietf.org/rfc/rfc2104.txt,
5. Blowfish enkripcija, PHP, http://pear.php.net/package/Crypt_Blowfish,
6. HMAC algoritam, PHP, http://pear.php.net/package/Crypt_HMAC.

Igor Popov
13. jun 2006
Viša elektrotehnička škola
Računarska tehnika 11/02

You might also like