Tag Archives: computers

defcamp 2015 (ziua 1)

Azi fusei la DefCamp 2015. Am mai fost si anul trecut si mi-a placut, asa ca am zis s-o bifez si anul asta, mai ales ca s-a nimerit sa fiu pe aici. Mai putini cunoscuti ca anul trecut, foarte multi oameni, se pare ca s-au inscris cam 800 la conferinta si anul asta ca noutate au avut 2 sesiuni in paralel. Treaba care a cam supt un pic ca pareau interesante diferite sesiuni paralele. Ma intalnii de dimineata si cu unul cu care am lucrat in Abu Dhabi si cu care am fost foarte amabil, ca sunt trei sferturi somer si cam trebuie sa-mi gasesc chestii de facut :))

Prima prezentare s-a numit “From Hype Hangover to Happy Hacking: Shaping the World through Shaping Actions” si a fost tinuta de un nene de a fondat sau lucreaza la “I am the Cavalary initiative”, un fel de think tank care se focuseaza pe cum poate fiecare sa ajute atunci cand sunt probleme de securitate. Prezentarea in sine a fost foarte misto si aratat binele pe care-l face cercetarea in securitate si cum poate sa “back fire” o data ce presa/media face reportaje bombastice despre diverse vulnerabilitati si lumea se panicheaza complet aiurea.

A doua prezentare, “A new Hope – CTF stories & IoT Hacking” a fost tinuta de Bitdefender (unul din prezentatori a fost Jay, alalalt nu stiu cine era) si s-a vorbit mai mult de Capture the Flag, cam cum vede lumea Internet of Things si problemele de securitate asociate cu asta. Nu imi aduc aminte prea multe detalii, probabil din cauza ca eram inca rupt in gura de somn.

Am vrut sa vad “Building a Weaponized Honeybot”, dar n-a venit prezentatorul, asa ca m-am dus la “Game of Hacks: Play, Hack & Track”, tinuta de un tip de la Checkmarx, despre cum poti invata hack-uri si metode de programare sigure prin jocuri. A facut si un demo live cu platforma la care au participat ~145 persoane din sala. M-am bagat si eu si am ajuns undeva pe locul 30.

Dupa asta am ars-o pana la pranz, ca urmtoarea prezentare mi s-a parut extrem de bullshitista din titlu, si anume “App2Own Bug Bounty Awards, Orange Romania”. A dat securitatea in operatorii mobili…

Dupa pranz m-am dus la “IoT Security”, prezentare tinuta de doi rusi, co-fondatori la un startup de securitate. Background tehnic super misto, insa abilitatile lor de prezentare invers proportionale. M-am plictisit in primele 10 minute si m-am tirat in ailalta sala unde a fost o prezentare numita “Challenges on Reversing Layered Malware” tinuta de un nene de la Fortinet. Foarte misto, foarte tehnica prezentarea, chiar am invatat niste lucruri noi despre cum se impacheteaza malware-ul modern, cum incearca sa detecteze daca ruleaza intr-un debugger sau intr-o masina virtuala.

Urmatoarea prezentare s-a numit “When Steganography Stops Being Cool” tinuta de un spaniol de la Trend Micro. Asta chiar mi-a placut ca a explicat cum malware-ul foloseste metode steganografice de a downloada sau a uploada date in moduri in care nu poate fi detectat de solutiile antimalware existente. Una din metode este de a encoda date in imagini folosind pattern-uri de culoare imperceptibile ochiului uman, insa perfect vizibile unui computer (RGB 255,255,255 este la fel cu RGB 255,255,254 pentru om, insa distinct pentru computer), aflarea centrelor de comanda si control folosind interogari DNS pentru TXT records si multe altele. Chiar mi-a placut foarte mult prezentarea, pot sa zic ca pe ziua de azi a fost cea mai misto.

Dupa aceea a urmat una legata de firmware reverse engineering, numita “(In)Security of Embedded Devices Firmware – Fast and Furious at Large Scale”. Tipul care prezinta stie despre ce vorbeste, a avut o prezentare foarte misto anul trecut, insa cea de anul asta nu mi s-a parut foarte interesanta. Pe la jumate m-a luat somnul si m-am dus spre casa.

Cam asta a fost prima zi la DefCamp. Maine se arata o zi mai interesanta si chiar sper sa fie asa.

Aseara am nimerit la cina prezentatorilor si se pare ca international este foarte bine vazut DefCamp, era un nene (fost profesor universitar) din San Francisco care venise special pana aici sa fie prezent sa vada cum e. La fel si unii din Albama si South Carolina.

Cateva chestii mai mult organizatorice:

  • Varianta cu sesiuni paralele suge, ca trebuie sa alegi intre una si alta.
  • Cafeaua a fost putina si s-a terminat repede, abia a iesit cam un pahar de fiecare pentru aia de beau cafea.

pyodbc & centos 6

Pe CentOS 6, versiunea de pyodbc este 2.1.7 si are un mic bug atunci cand are de interoperat cu baze de date care tin mortis sa dea datele encoded UTF-16 si face double-encoding la orice rezultat primit de la baza de date in urma unei interogari, daca ruleaza pe un sistem pe 64 de biti (cam asta am inteles io din descrierea problemei).

Descrierea BUG-ului se afla la https://code.google.com/p/pyodbc/issues/detail?id=78 iar rezolvarea se face prin modificarea unei singure linii de cod si stergerea unei litere :)

La http://www.imacandi.net/sin/blog/wp-content/uploads/2015/09/pyodbc-2.1.7-1.el6.x86_64.rpm se gaseste un RPM cu pyodbc patchuit si recompilat.

Cu ocazia asta mi-am adus aminte si de cum se foloseste rpmbuild.

double failures

In anii astia de acum (adica 2014/2015) eu nu pricep de ce vreun producator de echipamente ar face doar echipamente cu o interfata “IN” si una “OUT” si desi face clustering, nu poti face agregare in nici un fel astfel incat sa ai protectie in caz de pica switch-ul A si echipamentul B (incrucisat adica). Complicat nu este, mai ai un nivel de abstractizare cu impact minim ca toti linucsii astora de fac “appliance”-uri stiu de bonding si alte crapuri.

Srsly, nu pricep de ce toti zic, eh, lasa ca te descurci tu cum faci asta, noi nu vrem sa te ajutam in nici un fel, noi punem cat mai putine interfete pe chipamente si aia e.

Scapi de nenumarate griji cu un setup din asta, se pot strica chestii si poti sa-ti vezi de ale tale pana ai timp sa le repari tot asa… dar nu, s-au gandit unii ca de ce sa fie simplu cand poate sa fie complicat.

Asta e un rant de voiam sa-l zic de mai demult, de prin mai, da a trebuit sa fixez ce era muit si am uitat de el. Priorities, priorities.

ip number

Well, se pare ca m-am prostit si am descoperit niste roti patrate. Noroc ca #mumu e vigilent si imi zice cand sunt prost. Cred ca trebui sa raman la consultanta, nu la chestii din astea de implementare.

SELECT city,country FROM geoip_v4 WHERE
ip_from <= inet_aton('10.20.30.40')
AND
ip_to >= inet_aton('10.20.30.40');

Dar pentru istorie, ca sa mai rada si altii de ce chestii debitez cateodata, ramane si textul initial, cu mentiunea:

<rpetre> ce credeai ca e formula aia magica de ip to number? :)

Exista niste unii, care se cheama IP2Location de vand informatii de IP GeoLocation, adica pe scurt iti zic in ce oras/tara este inregistrat un subnet. Ei datele astea le dau CSV sa le incarci in ce vrei tu si dupa aia sa faci cautari in ele.

Pentru ca nu toate bazele de date au IP/subnet ca tip de data, daca te uiti dupa o singura adresa IP si tu tii subnet-uri in DB trebuie sa faci niste programare la mijloc sa afli de al cui sunbnet apartine o adresa IP. Asa ca oamenii astia au inventat ei o chestie de se cheama IP number: adica transformi 1.2.3.4 intr-un numar dupa o formula si dupa aia vezi tu cam intre ce valori se situeaza numarul ala in baza de date si afli cum ii cheama pe aia de-l utilizeaza si unde sunt inregistrati.

In baza de date informatiile sunt tinute sub forma de IP_FROM, IP_TO, CITY, COUNTRY plus alte chestii irelevante pentru post-ul asta. IP_FROM e numarul de la care “pleaca” un subnet si IP_TO numarul unde se “termina” subnetul. Formula dupa care se calculeaza IP number este:

X = A x (256*256*256) + B x (256*256) + C x 256 + D

In SQL (PostgreSQL* compatibil), un lookup dupa 10.20.30.40 se transforma in:

SELECT city, country FROM geoip_v4

WHERE ip_from <= 

((split_part('10.20.30.40','.',1)::INT * (256*256*256))
+
(split_part('10.20.30.40','.',2)::INT * (256*256))
+
(split_part('10.20.30.40','.',3)::INT * 256)
+
split_part('10.20.30.40','.',4)::INT)

AND ip_to >=

((split_part('10.20.30.40','.',1)::INT * (256*256*256))
+
(split_part('10.20.30.40','.',2)::INT * (256*256))
+
(split_part('10.20.30.40','.',3)::INT * 256)
+
split_part('10.20.30.40','.',4)::INT)

<= si >= ajuta sa faci match pe adresa de retea si pe broadcast daca stii exact unde ma-sa se termina subnet-ul pe care-l cauti si daca chiar vrei asta, altfel e bine doar cu < si >.

Cast-ul la INT l-am pus ca baza de date imi facea cast in FLOAT dupa care il compara cu INT si ca sa-l compare mai facea un cast din FLOAT in INT. Am sarit un pas, ca profilerul pentru acelasi query zicea ca dureaza ~500msec sa se uite in 11M de inregistrari (beware of my small data) pentru VARCHAR::INT si vreo 45sec sa se uite tot acolo dupa VARCHAR::FLOAT::INT. E un pic dubios rezultatul de la profiler pentru ca nu cred ca dureaza asa mult sa te faci ca n-ai nimic dupa virgula, dar si faptul ca daca rulezi un query cu cele doua variante diferenta ochiometrica intre ele e de maxim 2 secunde.

Pe de alta parte, nu-s mare fan ideii de “la mine pe laptop merge”, mai adaugati voi hardware sa mearga repede si la voi.

ssh trick

Am un setup care ruleaza niste scripturi in cron care iau niste fisiere dintr-o parte si le muta in alta (asta fiind varianta scurta). Fisierele sunt aduse de la distanta pe sistem.

Catch-ul cu asta e ca daca fac un scp si ma prinde cron-ul la jumate de transfer, se mucifica operatiile de dupa, ca o sa ajung sa am un fisier intr-o stare nu tocmai cunoscuta. Asta s-ar putea rezolva verificand cumva integritatea fisierului inainte de a incerca sa-l mut, insa mi s-a parut un pic peste mana (ca trebuie sa adaug si partea de integritate la fisier, sa verific ce si cum si parca e prea multa bataie de cap).

Partea buna in schimb e ca daca pe Linux (cred ca pe *NIX in general) vrei sa muti un fisier dintr-o parte in alta pe aceeasi partitie, operatia este atomica, asa ca solutia de a ma asigura ca fisierul ala fie a ajuns tot intr-un director sau nu, este:

ssh [email protected] "cat - > ~/file1 ; mv ~/file1 ~/work/file1"  < file1

Ce face treaba asta? Un cat peste o conexiune ssh si apoi muta fisierul scris initial in ~/ intr-un alt director numit ~/work.

Nu este chiar perfect pentru ca presupune ca ssh nu se strica in timp ce se transfera fisierul. Treaba asta insa se poate fixa send-side verificand codul de eroare intors de ssh care va fi non-zero daca orice din tot lantul ala de comenzi nu functioneaza si atunci poti sa mai bagi o fisa cu transferul.

Nu e cine stie ce descoperire, dar pot sa-mi fac treaba elegant :)

ms filetime & unix time

TIL despre FILETIME, adica cum tine Microsoft timpul.

FILETIME inseamna cate perioade de 100ns au trecut de la 1 Ianuarie 1601 pana la momentul asta si este pe 64 de biti, sa aiba loc sa bage timp :)

Formula de transformare in UNIX time, adica secunde trecute de la 1 Ianuarie 1970 pana acum este in felul urmator pentru o valoare a FILETIME de 130796482290000000:

EPOCH_DIFF = 116444736000000000
RATE_DIFF = 10000000
INTERMEDIATE_RESULT = (130796482290000000 - EPOCH_DIFF) / RATE_DIFF
RESULT = (INTERMEDIATE_RESULT * 1000)

Din RESULT se se iau primele zece cifre si rezulta UNIX TIME (epoch), adica 1435174629 care traduce in “Wed, 24 Jun 2015 19:37:09 GMT” (toate calculele se fac UTC).

expect

Azi mi-am stors creierii sa aflu de ce un script merge OK rulat din CLI dar din cron nu.

Scriptul meu facea niste operatii, dupa aia apela un script de expect care rula un scp si tot asa. Anyway, important era sa mearga scp-ul ala si sa mute un fisier dintr-o parte in alta.

Din CLI mergea de n-avea aer:

spawn scp $fisier [email protected]:/locatie
expect "Password:"
send "parola\r"

Din cron crapa cand cerea scp parola in mod subit.

Dupa dat cu capu de masa si de servere si un pic de cautat pe interneti am gasit varianta salvatoare:

spawn scp $fisier [email protected]:/locatie
expect "Password:"
send "parola\r"
expect 100%
sleep 5
exit

Banuiala mea e ca din cauza ca atunci cand ruleaza din cron n-are terminal, scp nu poa sa scrie pe undeva progresul de copiere si atunci moare dar fara sa chitaie de eroare, in schimb daca ii dau cu expect 100%, atunci cumva scrie intr-un fel de buffer al lui expect si nu se mai strica jucaria.

Asta din categoria cu ce-mi mai ocup eu timpul in ultima vreme: fac Frankensteini din bash, expect, sed, awk, python, perl si ce mai am pe la indemana :)

ssh on windows

http://blogs.msdn.com/b/looking_forward_microsoft__support_for_secure_shell_ssh1/archive/2015/06/02/managing-looking-forward-microsoft-support-for-secure-shell-ssh.aspx

A inghetat iadul. Apocalipsa e aproape.

ms_ssh_windows_server

ms_ssh_windows_p2

“As Microsoft has shifted towards a more customer-oriented culture”. Si acu sa ii intreb si eu pe ei daca tot au devenit “customer oriented”: Aduceti si voi in mortii vostri butonul de start din Windows inapoi asa cum trebuie sa fie, adica cum era pe Windows 7?

f.lux

Am descoperit, via #mumu, un program numit f.lux care schimba “caldura” luminii de la ecran in functie de ora din zi si pleaca de la vreo 6500K pana la 1900K. In felul asta cand se lasa intunericul afara, se lasa seara si la ecran si lumina nu mai este alba puternic ci devine ca cea de lumanare, treptat treptat.

Asa acum pot sa ma uit la ecran cu lumina stinsa in camera fara sa ma doara ochii ca este ecranul prea alb.

La inceput a fost un pic dubios sa ma uit la un ecran cu lumina galbejita, dar m-am obisnuit si acum este OK si probabil ochii mei au varsat o lacrima de bucurie in cinstea lor :)

disk cleanup on windows server

Pe Windows Server 2008 R2, daca instalezi patch-uri sau service pack-uri, toate fisierele inlocuite sunt copiate intr-un backup pentru fiecare patch in parte. Lucru OK de altfel, sa poti sa faci rollback in caz de buba cu patch-ul sau service pack-ul. Doar ca in timp crapurile astea se aduna si incep sa consume spatiu pe discul de boot, care de obicei nu e cel mai mare disc din lume :)

Daca vrei sa faci curat, exista doua variante:

  • Stergi de mana chestii de prin directoarele lui Windows si speri ca nu strici nimic
  • rulezi Disk Cleanup de la MS si face ala curat cum trebuie si unde trebuie

Eh, Disk Cleanup asta vine in kit-ul de Windows Server, numai ca in inteligenta lor prea-marita s-au gandit ca de ce sa fie simplu cand poate sa fie complicat si au bagat Disk Cleanup intr-un feature numit Desktop Experience (probabil doar aia cu laptop-uri si desktop-uri cu Windows Server pe ele mai au nevoie sa curete mizerii din sistem) si trebuie sa-l instalezi. Care cacat de feature vine si cu plugin-uri de “Ink and Handwriting Service”, ca sigur o sa infig un asemenea dispozitiv intr-un server… Si ca sa fie cacatul si cu cireasa pe deasupra, dupa ce pui toate astea, trebuie sa dai restart la masina sa se instaleze ce mortii lui are nevoie sa instaleze.

Si uite asa pentru o chestie simpla, consumi timp si resurse aiurea because, fuck logic…