Din terminologia utilizată de hackeri

În acest articol o să descriu succint, dar sper pe înțelesul vostru, câțiva din termenii utilizați des de cercetătorii în domeniul securității sistemelor informatice (numiți de media și hackeri).

Ca o scurtă notă, comunitatea ”hackerilor” a apărut dintr-o nevoie, una pe care acum poate societatea o resimte tot mai aproape, după expansiuea rețelelor de socializare și binențeles a internetului. Ca exemplu, o să vă dau o lege din constituția SUA, care permite oricărui cetățean să dețină o armă pentru a se putea apăra de guverul SUA.
Nu este scopul acestui articol să intre în polemici de etică, conduită sau morală așa că o să trec direct la subiect.

PoC: prescurtarea de la Proof of Concept, respectiv un document, o prezentare, sau o legătură care poate fi folosită pentru a dovedi că o presupusă vulnerabilitate chiar există, și deci poate fi reprodusă. Un astfel de exemplu este prezentarea lui Barnaby Jack.

RCE: Remote Code Execution, este un tip de vulnerabilitate prin care un sistem poate fi manipulat să ruleze secvențe de cod specificate și/sau comenzi trimise de pe o altă mașină – de la distanță.

Un exemplu elocvent sunt cele raportate recent cu mașina virtuală Java. De exemplu folosind această metodă la vizitarea unei pagini web care încarcă un applet Java ce conține un cod specific de evaziune, mașina virtuală care rulează pe sistemul vizitatorului pentru a executa applet-ul din pagina web, poate fi manipulată să execute un fișier specific de pe disc – de exemplu notepad.exe sau shudtown.exe.
Desigur că Java a fost actualizat și este acum mai sigur însă ar fi o idee bună să verificați dacă aveți instalată ultima versiune.

Buffer Overflow/Underflow: un tip de vulnerabilitate care permite abuzul memoriei rezervat unei aplicații. Acestea cauzează blocarea sau oprirea forțată a soft-ului în cauză și uneori poate duce la blocarea mașinii pe care ruleză softul afectat. Un exemplu este cea cu antetul Range în Apache versiunea 2.0. Aceasta permitea trimiterea unei cantități mari de de valori care se suprapun în antetul Range, printr-o cerere către un server Apache 2.0, ducând la suprautilizarea de resurse hardware. Adesea acest tip de vulnerabilități sunt folosite pentru a provoca atacuri de tip DoS.

CSRF/XSRF: prescurtarea de la Cross-Site Request Forgery, este un tip de vulnerabilitate care permite trimiterea unei cereri automate din domeniul X la domeniul B în sesiunea mașinii/utilizatorului autorizate pe domeniul B.

Mai pe larg, acest tip de atac profită de fereastra de autorizare garantată de primul domeniu. Atunci cînd vă autentificați pe un site, (domeniul B.com), pentru a vă recunoaște, navigatorul dvs. primește de la aplicație bucăți de informații pe care le salvează într-o memorie temporară, numite și cookie-uri. Navigatorul dvs va re-trimite aceste ”prăjiturele” la domeniul B.com cu fiecare cerere (la fiecare încărcare de pagină) și astfel serverul știe că sunteți autentificat, și mai ales sub ce identitate sunteți autentificat. Să zicem că postați ceva pe saitul de pe domeniul B.com și apoi navigați la un alt sait pe domeniul X.net. Acesta din urmă, nu are acces la ”prăjiturelele” pe care navigatorul dvs. le-a primit de la domeniul B.com, însă nici nu are nevoie de ele, deoarece poate face o cerere către domeniul B.com, în timp ce dvs. încărcați una dintre paginile sale, pe domeniul X.net. Deoarece cererea se face direct din navigatorul dvs., și merge direct la domeniul B.com, acesta va include ”prăjiturelele” în anetele cererii. Astfel domeniul B.com este ”păcălit” că dvs. ați inițiat în mod voit cererea, și va proceda la autentificarea și autorizarea ei. Ceea ce conține această cerere este la alegerea atacatorului, și cel mai probabil strâns legată de specificul aplicației de pe domeniul B.com. De la publicarea unui mesaj pe o platformă de socializare până la transferul de bani într-un cont.

Pentru a vă proteja de acest tip de atacuri puteți apela la următoarele tehnici:

  • Folosiți navigatorul în ”mod incognito” (CTRL+Shift+N) pentru a accesa saituri importante. Astfel toate cookie-urile sesiunii sunt șterse la închiderea navigatorului;
  • Dați click be butonul de Logout (Deautentificare) înainte de a părăsi saiturile pe care sunteți autentificat;

XSS: este un acronim pentru de la Cross-Site Scripting și implică posibilitatea de expolatare a unei vulnerabilități într-o aplicație web, astfel încât să afecteze funcționarea respectivei aplicații, sau să permită accesul la informații considerate confidențiale între server și client. Este unul dintre cele mai răspândite tipuri de atacuri, de unde putem deduce că este și una dintre cele mai răspândite vulnerabilități în aplicațiile web.

Un exemplu poate fi o secțiune de comentarii, care permite postarea de comentarii, însă nu reușește să filtreze codul scris în Javascript înainte de afișarea comentariilor. Astfel un comentator poate include cod în Javascript în comentariul său. Când acest comentariu va fi afișat, va fi executat și codul Javascript, pe navigatoarele celor care vizitează pagina. Astfel atacatorul pate redirecționa utilizatorii la o altă pagină sau să afle cookie-urile stocate în navigatoarele lor.

SQL Injection: este un tip de vulnerabilitate ce permite unui atacator să execute cereri directe către un server de baze de date, prin intermediul aplicației web care este autorizată să facă conexiunea.

O sursă foarte răspândita pentru astfel de vulnerabilități ne-sanitizarea parametriilor de intrare (GET și POST) în aplicațiile web. Astfel, un atacator poate executa o cerere SQL special contruită, pentru a accesa sau modifica date care nu sunt accesibile decât aplicației web și utilizatorilor autorizați.

Un exemplu poate fi o pagină care listează profilele utilizatorilor, și oferă o funcție de căutare. Dacă aplicația nu sanitizează parametrii de căutare, un hacker poate insera în parametrii, o cerere specială către baza de date, care să listeze adresele de e-mail ale utilizatorilor sau chiar să schimbe parolele unor utilizatori. Mai multe exemple găsiți aici.

Information disclosure: este un tip de vulnerabilitate care permite aflarea de date confidențiale despre un utilizator sau un serviciu, apelând la servicii similare care stochează date similare pentru a filtra informația.

De exemplu, unele saituri de socializare afișează prietenilor adresa de e-mail și câteva cifre din numărul de telefon. Să presupunem că afișează primele 4 cifre din numărul de telefon. Știind că pe alte saituri, dacă ceri resetarea parolei pentru o adresă de e-mail la ultimul pas se vor afișa ultimele 4 cifre din numărul de telefon… mai rămâne de ghicit o cifră, pentru a afla numărul de telefon al persoanei respective.

Shell upload: o vulnerabilitate care permite încărcarea unui fișier executabil pe serverul ce găzduiește aplicația.

Un exemplu este cea descoperită în scriptul timthumb.php acum 2 ani, care permitea încărcarea unui fișier php pe serverele ce găzduiau acest script. Scriptul în sine este destinat să re-dimensioneze imagini, însă printr-o cerere special contruită acesta putea fi manipulat să salveze local un fișier aflat la pe un alt server.

Zero-Day: termen folosit pentru descrierea anvergurii unei vulnerabilități proaspăt raportate, și înseamnă că este posibil să afecteze milioane de saituri și computere, pe tot globul. Practic  ar trebui să pună toți administratorii din domeniul IT, și mai ales pe cei din domeniul securității pe jar.

Exploit: este rezultatul unui PoC. Un script sau executabil care poate fi folosit ca PoC.

DoS/DDoS: prescurtarea de la Denial of Service respectiv Distributed Denial of Service, este un atac care urmărește oprirea unui serviciu. Diferența dintre DoS și DDoS este că pentru un DoS se folosește o singură mașină sursă, pe când într-un DDoS sunt implicate mai multe mașini în paralel.

Brute-Force/Dictionary Attack: este un tip de atac ce are ca scop aflarea unei parole, sau a unei chei de criptare prin încercări repetate de combinații posibile. Dacă aceste combinații provin dintr-un dicționar (o listă filtrată de combinații pe diverse criterii) atunci este un dictionary attack.

Și lista poate continua… însă cred că pentru moment sunt destule. Totuși doresc să menționez că devine și mai interesant dacă combinăm acești termeni: astfel putem avea o vulnerabilitate buffer overlow DoS, un DDoS dictionary attack, zero-day expoit, information disclosure SQL injection vulnerability ș.a.m.d .

Vulnerabilitate RCE în Java 1.7

Versiunea curenta a codului mașinii virtuale Java și pluginurilor browser suferă de o vulnerabilitate RCE (Remote Code Execution). Aceasta permite unui atacator de la distanță, printr-o pagină web special construită, să descarce și să execute un fișier executabil pe mașina victimei. Fișierul nu este necesar să fie o aplicația Java, poate să fie un EXE sau un BAT.

Cum metoda de intruziune este prin intermediul unei pagini web, cea mai bună metodă de a vă proteja este să dezactivați Java pe toate navigatoarele web pe care le folosiți. Cel puțin până pe la jumătatea lui octombrie, când se anunță un update la Java.

DeepEnd Research au propus o soluție intermediară în timp ce Rapid7 au testat deja cu succes un modul pentru Metasploit.

Nu sunt informații dacă această vulnerabilitate poate să afecteze și aplicațiile desktop care rulează Java, dar aplicațiile web sunt expuse.

Android: Tutorial – webImageLoader

In acest tutorial voi descrie pasii pentru realizarea unei aplicatii pe Android care incarca o imagine de la un url dat.
Aveti nevoie de:

Daca sunteti novice in acest domeniu, inainte de a continua acest tutorial, va recomand cu caldura tutorialul scris de Lars Vogel:  Android development with Eclipse, care acopera si configurarea AVD. Acestea fiind zise sa ne apucam de treaba:

Porniti Eclipse, mergeti la File -> New -> Other si din directorul Android alegeti Android Project si apoi faceti click pe Next. Se va deschide fereastra de preconfigurare a proiectului, pe care o completati astfel:

click Finish.

La urmatorul pas, vom da drepturi aplicatiei noastre sa acceseze resurse de pe Internet. Orice aplicatie Android care foloseste internetul, va avea nevoie de aceste drepturi configurate. Se procedeaza astfel:
Din partea stanga, din lista de proiecte, deschideti directorul proiectului webImageLoader si deschideti fisierul AndroidManifest.xml. Din partea de jos, navigati la tab-ul Permissions. faceti click pe Add. Apoi din lista ce apare alegeti „Uses Permission”. Observati ca in dreapta apare tab-ul Atributes for Uses Permission. Dati click pe sageata din dreptul atributului Name si din lista derulanta alegeti „android.permission.INTERNET”. La sfarsit trebuie sa arate asa:

Apasati Ctrl + S pentru a salva modificarile.

Urmeaza sa definim interfata, respectiv layout-ul aplicatiei. Pentru asta expandati directorul res al proiectului si deschideti din directorul layout fisierul main.xml. In bara de sus la Config selectam „Portrait” (emulatorul configurat are un display de acest tip).  Selectati din bara de jos main.xml pentru a vedea xml-ul ce defineste aceasta interfata. Stergeti tot de aici si inlocuiti cu xml-ul de definit la Pastebin: webImageView XML Layout  .
In final trebuie sa arate asa:

Acum urmeaza sa importam libraria Droid-Fu pe care mai intai o descarcati de aiciin format jar. O salvati undeva pe calculator, si o importati la proiect astfel: Click dreapta pe directorul webImageLoader din lista de proiecte din stanga si se alege Properties. In fereastra de proprietati, in meniul din stanga se navigheaza la Java Build Path apoi click pe tab-ul Librairies din lista de tab-uri din dreapta de sus.  Aici dam click pe butonul „Add External JARs…” . Se navigheaza in directorul in care am salvat jar-ul droid-fu il selectam si dam OK. Mai dam un Ok la fereastra de proprietati pentru a salva.

Mai ramane de facut codul sursa al aplicatiei – unde vom folosi o clasa a librariei droid-fu care ne va usura foarte mult munca. Navigam in directorul src al proiectului si deschidem pachetul „webimageloader.main”  si deschidem fisierul java – webImageLoader.java. Vom sterge tot codul autogenerat si il inlocuim cu codul din Pastebin: webImageVew Java Code .

Pentru a rula aplicatia in emulator dam click-dreapta pe directorul proiectului Run As -> 1 Android Application.

Rezultatul:

Scriem url-ul unei imagini in campul pentru text si apasam butonul „Load Image”. Unele imagini de dimensiuni mari se pot incarca mai greu.
Daca vi se pare ca asteptati prea mult verificati daca emulatorul are „semnal”, respectiv daca exista cel putin una-doua linii pline albe la indicatorul de semnal de langa indicatorul 3g; acesta indica daca emulatorul este conectat la internet.

Sper sa fie util ;) .