Tag Archives: computers

turop

Pentru un proiect de-al meu, in scop didactic, am nevoie sa pot emite certificate digitale cat mai usor cu putinta. Si cum tot am inceput sa mai apas butoane si in limbaje de programare, am zis ca ce bine, pot sa scriu ceva simplu pe web.

Asa ca azi am creat turop, o aplicatie web in care cine are nevoie face paste la CSR si primeste un certificat digital inapoi. E mega quick & dirty, in special dirty. Da merge si isi face treaba.

ammit

De ceva vreme am tot cochetat cu invatatul de Python in contextul dezvoltarii de chestii web based (sa le zicem servicii). Pentru ca am tot felul de idei, da nu prea stiu programare, m-am apucat sa fac experimente micute sa inteleg cum functioneaza treburile, cum se leaga componentele intre ele si alte lucruri din astea super de baza.

Unul din experimentele astea se cheama Ammit si  este un URL shortener foarte basic bazat pe Bottle si Redis (via redis-py). Poate fi rulat ca aplicatie UWSGI din nginx. Ce e comis pe GitHub, ruleaza ca si standalone app pentru testare/dezvoltare.

GitHub il folosesc ca sa invat de stuff cu git si version control.

defcamp 2015 (ziua 2)

Ziua a inceput cu “Modern approaches to Wi-Fi attacks” tinuta de un polonez fost militian care a explicat foarte frumos cum poti face brute forcing la parole pentru WPA2 la routere din comert. A vorbit foarte misto si de entropia parolelor si de faptul ca daca un router nu foloseste setari din fabrica si pune utilizatorul sa seteze o parola, parola respectiva tinde sa fie chiar buna si nu foarte simpla. Foarte, foarte misto explicat.

Dupa nenea asta a fost un turc de la KPN Netherlands, care a vrut sa vorbeasca despre “Why nation-state malwares target Telco Networks: Dissecting technical capabilities of Regin and its counterparts”, dar a reusit sa ma plictiseasca si sa ma enerveze maxim. A citit toate slide-urile de le-a avut, foarte monoton, n-a zis nimic interesant, numai generalitati, a pus cateva slide-uri cu acronime si a tinut mortis sa zica de la ceva vine fiecare acronim si dupa aia sa treaca mai departe la alte chestii fara nici o legatura cu ce a citit mai devreme.

Dupa aia am nimerit la “How to mess with Android Intents” tinuta de un romanas de la Intel care a vorbit despre cum poti face DDoS la un telefon cu Android daca il conectezi la computer folosind un cablu USB. Si dupa aia citit help-ul de la programul scris de el si de inca o tanti, tot de la Intel. Nu m-am prins care a fost scopul, ca o data ce ai telefonul fizic in mana…

Am luat o gura de aer si am stat destul de mult si la “Hacking and Securing Network Monitoring Systems: End-to-end walkthrough example on Ganglia” unde un tip (foarte bun pe firmware si chestii conexe) a vorbit despre cum poti cauta servere de monitorizare accesibile din Internet, sa exploatezi cumva interfata web si dupa aia sa ataci serverele stiind ce chestii ruleaza pe ele. #nimicnou (macar aia sunt amuzanti).

Asa a venit pauza de masa si m-am dus cu Sorinache la Beraria Bragadariu la o bere (duh!) si la o portie de coaste. M-am gandit ca un pic de alcool o sa ma faca sa-mi treaca dracii cu prezentarile astora.

Well, dupa ce-am halit si am ajuns inapoi, m-am dus la o prezentare numita “Breaking in Bad (I’m the one who doesn’t knock)” tinuta de un tip de lucreaza la Pwnie Express, cu subiectul “Social Engineering”. Asta e primul tip care a vorbit din experienta, documentat cu filmulete si poze, despre cum se face asa ceva. Omul are har de prezentator, e simpatic si stie cum sa faca o poveste interesanta. Mi-a placut enorm prezentarea lui, pe departe a fost cea mai misto.

Imediat dupa el a urmat “Building a Cyber Security Operations Center” tinuta de un nene din UAE despre cum sa faci un SOC, reglementari, complianta si restul de crapuri de le auzi de la un producator comercial. Eram langa mine cu o fosta colega si i-am zis ca o invit la o apa, si ea “am sa accept”. Cam asta era nivelul de interes si plictiseala.

Am stat un pic dupa pauza sa vad “What’s in a name? DNS use for exfiltration, and monitoring for detection”, motivul fiind ca era tinuta de Teodor Cimpoesu si stiam ca se pricepe la din astea. Dar minune, prezentarea nu a avut titlul asta, s-a schimbat in altceva oribil si pe la jumate asa cand m-am prins ca n-o sa fie nimic interesant, mi-am bagat pula intr-un mod diplomat si m-am dus acasa. Singura parte distractiva a fost asocierea numelui UTI cu “Trusted advisor” si “incredere”. Buna gluma.


Fata de anul trecut, anul asta a supt maxim. Calitatea prezentarilor a fost slaba spre execrabila, iar organizarea foarte defectuoasa. Privind lucrurile si dintr-o perspectiva pozitiva, o sa-mi fac puncte pentru CEH si CISSP :)

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 user@host "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 user@server:/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 user@server:/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 :)