Custom Password Filter
Cu totii stim optiunea “Password must meet complexity requirements”, insa nu stim ca atunci cand e activata Windows-ul foloseste un filtru (default) pentru a valida parola si ca se pot adauga filtre suplimentare.
In SDK-ul de Windows exista exemple pentru asa ceva, la fel si pe net:
http://www.devx.com/security/Article/21522
http://www.codeproject.com/KB/winsdk/LoginFilter.aspx
http://blog.didierstevens.com/2010/11/15/password-auditing-with-a-password-filter/
Acum vreo luna Vitalie imi recomandase prezentarea asta si acolo vazusem un filtru custom care salva parolele intr-un fisier text. Cum bineinteles ca dll-ul respectiv nu e public, m-am gandit “cat de greu o fi sa faci asa ceva?”. Pai mi-a luat cam o zi jumate (cu tot cu instalare de Visual Studio si invatat cum sa lucrez cu fisiere text). Chestiile mai complicate le-am facut cu copy/paste . Am testat doar pe 2003.
Instalezi DLL-ul pe domain controllere si oricine isi schimba parola … ajunge in log.
Ce vreau sa scot in evidenta este ca daca arati cuiva cum se face si nu ii dai sursele, nu inseamna ca-l protejezi. Pana si eu care habar nu am de C++ am fost in stare sa contruiesc un password filter. Trebuie pus accent pe faptul ca acest lucru nu ar fi posibil daca nu ai avea access pe domain controller (adica sa fii Domain Admin).
La cerere pot sa dau DLL-ul membrilor Winadmin.
14 Responses to “Custom Password Filter”
Comment from Andrei Ungureanu
Time March 3, 2011 at 12:54 pm
Pai si crezi ca celui care ar putea sa-ti puna asa ceva i-ar fi greu sa seteze “Password must ..”?
Comment from VItalie CIobanu
Time March 3, 2011 at 1:47 pm
🙂 tu ai prea mult timp liber 😀
Comment from Andrei Ungureanu
Time March 3, 2011 at 4:30 pm
😀 In ultimul timp nu prea. Asta il aveam pe lista de vreo luna si abia mi-am facut putin timp azi sa-l public.
Comment from Lacrama Dragos
Time March 4, 2011 at 4:46 pm
Din punctul meu de vedere Domain Admin-ul ar trebui sa aiba acces by default la asa ceva.
Doar din punctul meu de vedere. Am si argumente dar nu e cazul sa discutam aici pe blog.
Comment from Andrei Ungureanu
Time March 4, 2011 at 4:49 pm
Chiar sunt curios sa aud argumentele Dragos (aici sau pe forum). Vreau sa vad daca le pot contrazice sau nu :).
Comment from Lacrama Dragos
Time March 7, 2011 at 12:52 pm
Pai imi vine acum in minte un scenariu unde sa zicem ca un anume client foloseste un panou de control si seteaza parola la un user “1234”. Panoul de control nu ii da nici o eroare si apoi zice ca nu a reusit sa faca nu stiu ce lucru cu userul respectiv (sa presupunem ca e vorba de userul asociat unui cont de mail de Exchange).
Suna la admin sa-i zica ca nu poate intra in mail.
Adminul il intreaba:
cu ce parola intrii?
pai cu 1234.
Adminul incearca si nu merge. Apoi adminul zice:
2 secunde sa incerc sa pun eu alta parola;
pune alta parola si merge.
Acum problemele sunt multipla:
fie din group policy nu permite setarea parolei 1234 ca e prea simpla si adminul nu stie asta si risca ca ulterior userul sa repete povestea (parola ramanand neschimbata);
si alta mai aiurea e ca userul sa fi tastat gresit noua parola de 2 ori si el sa incerce cu o alta parola.
Problema e rezolvata usor vazand parola si elimini niste teste aiurea.
Sau la un dezvoltator web care de exemplu creaza un app pool si-l ruleaza sub un usr nou creat cu o parola noua. apoi se mira de ce nu porneste aplication poolul.
Oricum solutii exita in toate cazurile dar cred ca pt admin ar fi ok sa vada nativ parola.
Comment from Andrei Ungureanu
Time March 7, 2011 at 1:01 pm
Sunt de acord ca multe probleme s-ar rezolva mai usor daca am sti parola utilizatorului insa parola face parte din identitatea userului si e ceva ce numai el ar trebui sa stie. Un administrator cunoscand parola ar putea impersona userul fara sa poata fi detectat in vreun fel iar asta ar prezenta o bresa imensa de securitate.
La fel am putea spune ca ar fi mai simplu daca nu am folosi parole.
Comment from Lacrama Dragos
Time March 7, 2011 at 1:18 pm
Oricum argumente pro si contra sunt cu gramada dar eu fac parte din aia care crede ca nativ ar trebui sa o vezi.
Intimitate nu exista. Daca adminul vrea sa faca ceva, face.
Tocmai de aia corporatistii nu-s folosesc mail-ul de la munca in diferite discutii personale 🙂 de teama adminului ca poate vrea sa vada ce mai face fara sa-l intrebe :).
Nu am facut asa ceva niciodata si nici nu o sa fac (cand eram mai mic am facut ceva similar dar eram mic si se iarta).
Deci pana la urma tine de moralitate.
Comment from Andrei Ungureanu
Time March 7, 2011 at 1:26 pm
Pai tocmai, adminul oricum poate sa vada/faca o gramada de chestii (fara sa stie parola; de fapt poate face orice). Ce nu poate sa faca e sa impersoneze userul, pentru ca parola trebuie stiuta doar de utilizator (cu ea se autentifica). Riscul ca parola sa fie expusa in clar altor persoane este prea mare.
Cazuri de useri incompetenti sunt o gramada, insa nu trebuie sa lasam garda jos din cauza lor.
PS: de fapt poti sa-l impersonezi si fara sa-i stii parola, insa prefer sa nu dezvolt.
Comment from Lacrama Dragos
Time March 7, 2011 at 1:31 pm
Stiu ca se poate.
Chiar mi-a cerut cineva asta si cu parere de rau l-am ajutat. Dar pana la urma era business-ul omului si el m-a platit sa-i fac ceva acolo si el platea si pe cie ce-i monitoriza. Asa ca monitorizarea era justificata.
Comment from Andrei Ungureanu
Time March 7, 2011 at 1:33 pm
Monitorizarea e una. Impersonarea userului fara ca el sa stie e alta.
Comment from Lacrama Dragos
Time March 7, 2011 at 1:36 pm
Corect.
Monitorizarea inseamna atunci cand il anunti pe user ca poti sa-l verifici fara ca el sa stie.
Dar asta si userul ar trebui sa stie fara sa mai fie anuntat 🙂
Comment from Andrei Ungureanu
Time March 13, 2011 at 4:32 pm
Am testat DLL-ul si pe 2008 (x86) si merge. Asta apropo de unele comentarii de pe net care spun ca in 2008 nu se mai aplica mecanismul asta.
Comment from Dan
Time March 3, 2011 at 12:51 pm
..cool 🙂
Deci daca vrem sa ne protejam de chestia asta, mai bine nu bifam “Password must meet complex…”