M'he comprat (i llegit) aquest llibre de Brian Kernighan:
És un recull d'experiències de l'autor relacionades estretament amb el desenvolupament del sistema operatiu UNIX i algunes de les seves eines principals com compiladors, analitzadors lèxics i editors de text al llarg dels anys 70s.
Ha resultat interessant conèixer un testimoni de com s'espremia la tant limitada i cara memòria dels ordinadors dels anys 70 en els que va ser desenvolupat aquesta tecnologia: el PDP 7 i el PDP 11 de Digital Equipment Corporation. L'autor va participar molt activament en algunes eines i en detalla com les dissenyava i les escrivia. També parla d'altres eines i els seus respectius autors com Dennis Ritchie, Ken Thompson, Rob Pike o Bill Joy. Tot plegat ben carregat d'anècdotes explicades en primera persona.
És un llibre que per a l'entusiasta dels Unix li resultarà molt curt ja que a mida que un el va llegint el va engrescant i el va introduïnt en més i més històries però no hi ha tantes planes per a explicar-ho tot i acaba. Potser esperava que fos dens com el Cult of the Dead Cow: How the Original Hacking Supergroup Might Just Save the World de Joseph Menn. Potser Rob Pike podria continuar i refarcir la història de Kernighan, ja que sembla més avesat a escriure que no pas Thompson o Ritchie (a part de que son morts…).
Al llarg dels capítols s'hi pot fer un recull d'adreces web i referències a papers i treballs de tots aquells programadors que complementen les històries explicades per l'autor amb d'altres històries i documents tècnics.
Jo he gaudit molt llegint-lo, tant com quan era petit i veia la pel·lícula Al filo del abismo (Gleaming the cube) i, seguidament, agafava l'skateboard per tal (d'intentar) imitar en Tony Hawk: Quan acabes el llibre agafes un grapat d'imatges de floppy d'algun antic SYSV o BSD i l'instal·les en una màquina virtual.
Degut a la gran expansió que actualment pren el llenguatge COBOL i la interfície de terminal de text he pensat que és molt necessària l'aplicació de la tecnologia CAPTCHA als logins de les aplicacions Cobol.
En aquest post s'ensenyarà com aplicar un Captcha a un programa Cobol. Es mostra un text en ascii-art i l'usuari l'ha de transcriure amb el teclat. Si l'encerta, el programa continua però si el falla, el programa s'atura.
Es recomana el compilador gnucobol però pot funcionar amb qualsevol altre que admeti crides a sistema CALL “SYSTEM” USING…
Per a començar, ens cal el següent:
Per anar al gra, el que cal afegir al nostre programa, per a que implementi el Captcha, és el següent:
Dins la CONFIGURATION SECTION, afegirem aquest descriptor de fitxers:
FILE-CONTROL. SELECT captchafile ASSIGN TO captchafilename ORGANIZATION IS LINE SEQUENTIAL.
I dins la FILE SECTION afegirem la definició del descriptor:
FD captchafile. 01 FILEGLOBAL. 02 FILELINE PIC X(80). 88 EOFcaptchafile VALUE HIGH-VALUES.
En la WORKING-STORAGE SECTION afegirem les variables que utilitzem per al Captcha:
77 captchafilename PIC X(25) VALUE SPACES. 01 BANNERCMD PIC x(22) value "/usr/bin/figlet-figlet". 01 random-number PIC X(10). 01 CAPTCHA PIC X(10). 01 ARGV PIC X(100) VALUE SPACES. 88 RECV VALUE SPACES.
Ja en la PROCEDURE DIVISION, en la SECTION en la que treballem, afegim:
ACCEPT random-number FROM ENVIRONMENT "RANDOM2".
☝ Aquesta sentència pren un nombre al·leatori de la variable d'entorn (de la shell Unix) $RANDOM2.
IF random-number = SPACE OR random-number = LOW-VALUE THEN DISPLAY "PROGRAM NOT CORRECTLY INITIATED. ABORTING EXECUTION." LINE 21 COLUMN 2 CALL "C$SLEEP" USING BY CONTENT 3 END-CALL STOP RUN END-IF
☝ Aquest bloc controla que s'hagi rebut un nombre des de la variable d'entorn $RANDOM2.
CALL "SYSTEM" USING FUNCTION CONCATENATE(BANNERCMD " " random-number " > /tmp/.rnd-" random-number) END-CALL. MOVE FUNCTION CONCATENATE("/tmp/.rnd-" random-number) TO captchafilename OPEN INPUT captchafile READ captchafile AT END SET EOFcaptchafile TO TRUE END-READ. PERFORM UNTIL EOFcaptchafile DISPLAY FILELINE LINE CAPTCHA-Y COLUMN 2 ADD 1 TO CAPTCHA-Y READ captchafile AT END SET EOFcaptchafile TO TRUE END-READ END-PERFORM CLOSE captchafile CALL "CBL_DELETE_FILE" USING FUNCTION CONCATENATE("/tmp/.rnd-" random-number)
I el bloc anterior el que fa és mitjançant un CALL executar el programa figlet i enviar la sortida a un fitxer de text temporal. Seguidament es llegeix (READ) el fitxer i s'imprimeix per pantalla línia a línia (PERFORM… DISPLAY). Finalment s'elimina el fitxer temporal.
DISPLAY "ESCRIU EL NOMBRE D'AMUNT: " LINE 20 COLUMN 2. ACCEPT CAPTCHA AT 2026 WITH TIMEOUT AFTER 20 ON EXCEPTION STOP RUN.
☝ Aquí demanem a l'usuari que escrigui el nombre que apareix al Captcha i ho desem dins la variable CAPTCHA.
IF CAPTCHA IS NOT EQUAL TO random-number THEN DISPLAY "NOT CORRECT. DISCONNECTING." LINE 21 COLUMN 2 CALL "C$SLEEP" USING BY CONTENT 3 END-CALL STOP RUN ELSE DISPLAY "CAPTCHA SOLVED CORRECTLY. CONNECTING..." LINE 21 COLUMN 2 CALL "C$SLEEP" USING BY CONTENT 3 END-CALL END-IF.
☝ I en el bloc de dalt controlem si l'usuari ha entrat correctament el codi o no. Segons el resultat, el programa agafa un camí (continuar l'execució) o l'altre (STOP RUN).
Aquest procediment és molt millorable. Per exemple, hauriem de poder realitzar programàticament, en Cobol, el següent:
Qui s'anima a fer-ho?
Notes:
Fem servir una variable d'entorn $RANDOM2 ja que el programa de Cobol no és capaç de llegir la variable $RANDOM, per tant, abans de la seva execució, assignem el valor de $RANDOM a $RANDOM2 i llavors el programa sí que és capaç de llegir aquesta nova variable.
L'altre dia, mentre posava ordre, vaig trobar una bobina de CDRoms on, entre tots els discos, hi havia un backup amb l'etiqueta “BSD, 1995”. Dins hi havia un /home sencer, una còpia del directori personal que tenia aquell any. Pels fitxers de configuració que hi vaig trobar, i segons la meva memòria, devia ser d'un Slackware.
En aquella època jo era un “script-kiddie”, és a dir, un nano torra-collons, a la xarxa. Em dedicava a reunir una extensa col·lecció d'exploits, organitzats segons sistemes operatius, versions, programes, compilacions, etc. Amb aquests exploits provava la seguretat de sistemes Unix i Vax remots, d'arreu del món i, en la majoria dels casos, m'hi introduïa.
En aquell CDRom hi havia, a part dels exploits, tota una caixa d'eines que utilitzava per a tantejar els objectius. Avui dia d'això se'n diu “buscar un vector d'atac”. D'entre totes aquelles eines, n'hi havia una que utilitzava *sempre*: strobe.
Strobe era un programa que escanejava ports. Li oferies l'adreça IP o el hostname de l'objectiu i en trobava tots els ports que estaven oberts, esperant connexions.
Aquesta eina la va desenvolupar Julian Assange, quan era un hacker, i en aquell temps no vaig donar-l'hi la més mínima importància: tothom signava el seu software, amb els seus “nicks” o noms-de-guerre i, en alguns casos, amb el nom real.
Adjunto, en aquest post, un fragment d'una captura de pantalla que vaig fer el 1995, on es veu una finestra de terminal on s'hi executa l'strobe. No tinc ni idea de per què vaig fer aquella captura. Normalment feia captures de pantalla dels sistemes que hackejava, com a trofeu. Utilitzava el xwd (X-Window dump) i me l'enduia cap al meu ordinador. Sovint hi apareixia l'escriptori de l'administrador, amb les seves terminals i les tasques que feia. Sovint també només hi apareixia un login de CDE.
Ho he trobat curiós i per això ho he compartit amb vosaltres.