You are on page 1of 18

CreandounRansomewaredesde0conPython

Antesdecomenzaraescribir,esperoquenomalinterpretenmisintencionesdelibreenseanza,seque
es un peligroso este tipo de artculos y que en manos equivocadas puede causar dao a personas y
organizaciones, por este motivo, decid aclarar que mi intencin es poner este conocimiento solo para
causarenbienapesardequesueneutpico,porotraparte,quieroquesepanquelosciberdelincuentes
ya saben esta informacin y que nosotros que nos dedicamos a proteger los activos de informacin,
somosmasignorantesenestetema,porloqueamimeparecemasunaigualacindeconocimientosque
undescuido.

Amijuicio,creoqueesmspeligrosaladesinformacinqueexistedeestetema,hevistoquegrandes
empresas intentan vender soluciones, causando pnico, mostrando que este tipo de programas son
amenazas avanzadas y que solo ellos pueden solucionar, para mi todo lo que he visto hasta ahora de
publicacionesdeesteMalware,sonpurosprofetascondeliriosdeMesasqueintentanvender,masque
ensearcomosehaceestetipodeprogramas(comodiceelviejodicho,enelpasdelosciegoseltuerto
es rey). Pienso que es mejor conocer como funciona la enfermedad, para poder desarrollar una cura
efectiva.Esperoquelainformacinypruebasdeconceptolessirvanypuedansolucionarsusproblemas
oseddeconocimiento.

Paralosquenoconocendeloqueestoyhablando,seestarnpreguntandoQueesunRansomware?Y
para mi la respuesta es sper simple, un ransomware es un programa que cifra datos de una
computadora y despus pide una recompensa monetaria a cambio de la clave para recuperar los
archivos, es algo as como un secuestro, pero de informacin. Si no quedaste conforme te recomiendo
leas el siguiente enlace hps://es.wikipedia.org/wiki/Ransomware
(hps://es.wikipedia.org/wiki/Ransomware)

Comodiceunviejoamigo,doscucharadasyalapapa.
Ingredientes:
Ingredientes:

Necesitamosunamaquinavirtual,sinosabescomoinstalarunatedejoestosartculosqueescrib
haceuntiempo.

1PREPARANDOELENTORNOVIRTUALPARACOMENZARAPROGRAMARENPYTHON.
(hps://cybersecuritylaboratory.wordpress.com/2016/08/26/preparandoelambienteparacomenzara
programar/)

2PREPARANDOELENTORNOVIRTUALPARACOMENZARAPROGRAMARENPYTHON.
(hps://cybersecuritylaboratory.wordpress.com/2016/08/26/creandonuestramaquinavirtualde
pruebas/)

3PREPARANDOELENTORNOVIRTUALPARACOMENZARAPROGRAMARENPYTHON.
(hps://cybersecuritylaboratory.wordpress.com/2016/08/26/congurandonuestroubuntu/)

UnamaquinaLinux,sinosabescomohacerlotedejoesteotroarticulo.

INSTALANDOUNIDEPARAPROGRAMARENPYTHONYSISTEMAOPERATIVOUBUNTU
(hps://cybersecuritylaboratory.wordpress.com/2016/08/26/instalandounideparaprogramaren
pythonysistemaoperativoubuntu/)

SaberalgodeprogramacinenPython
Ganasdeaprender

Diagramadeloquesepretendeensear:

Paso1:

Secreauncdigoquecifredatosdeunacomputadora,escoghacerloenpythonporsuversatilidady
Secreauncdigoquecifredatosdeunacomputadora,escoghacerloenpythonporsuversatilidady
facilidaddeaprendizaje.

Paso2:

Sedebeinfectarunamaquinaconelcdigo,enesteejemplonovoyamostrarningnvectordeataque
parahacerlomassimpleydecidinstalarlodirectamenteenlacomputadora.

Paso3:

Al infectar la maquina, esta busca ciertos directorios que nosotros le indiquemos, va a cifrar con una
contrasea aleatoria y cuando este todo listo las va a enviar a un servidor Web. El servidor Web va a
recibirunIdyunpassword,lovaaguardarenunabasededatos.

Paso4:

Lamaquinainfectadavaatenersolounscriptpararecuperarlosarchivoscifradosyselevaasolicitar
unpago.

Paso5:

Elusuariopagapormediodebitcoin.

Paso6:

Seprocedeaejecutarelscriptconlacontraseaobtenidadespusdelpago.

DesarrollodeRansomwareenPython

Para escribir este cdigo me base en una versin de OpenRansomware y modique algunas cosas. De
todasmaneraslesdejoelcdigofuenteoriginalenelsiguientelink:

hps://github.com/Speed09/OpenRansomware (hps://github.com/Speed09/OpenRansomware) (El


cdigo no funciona, tiene varios errores, pero me sirvi para hacer este artculo, as que todos los
crditosparael)

Paracomenzarabrimosnuestroeditordetextofavoritoenmcasogedityescribimoslosiguiente:

Delalnea4ala10seencuentranlaslibrerasnecesariasparaejecutarelcdigo.
LafuncinLinux()contienelosiguiente:

Enlalnea13sepreguntasielusuarioqueejecutoelscriptessudo,paralosquenoestnfamiliarizados
con este termino les comento que, El programa sudo (del ingls super user do ) es una utilidad de
los sistemas operativos tipo Unix, como Linux, BSD, o Mac OS X, que permite a los usuarios ejecutar
programas con los privilegios de seguridad de otro usuario (normalmente el usuario root) de manera
segura,convirtindoseastemporalmenteensperusuario.

Enlalnea14,silaarmacindelalnea13escorrectayelscriptseejecutoconusuariosudo,seagrega
el directorio root a la lista de archivos a cifrar, esto podra ser muy grave si no se tienen controles de
seguridadparaentrarcomosudoamaquinasdeproduccin,yaquepodramosarriesgarnosaquese
cifrenotrosprogramasnecesariosparaquefuncionesunSO,lescompartounaimagenparasaberque
otrosarchivosoprogramassepuedencifraryhacerdeesto,unaverdaderapesadilla.
En la lnea 17 se genera una cadena de texto de letras y nmeros, si lo comprobamos en la consola
interactivadePythonnosentregaralosiguiente:

EnlaLnea18segeneraunaclavealeatoriadelargo30concaracteresynmeros

Enlalnea25seejecutalafuncinencargadadeenviarlaclaveyelIDanuestroservidorreceptor.

Enlalnea26seejecutalafuncinquerecorrelalistadedirectoriosqueledimosanteriormenteylasva
cifrando.

Enlalnea27seejecutalafuncinquedejalasindicacionesalavictimaparasepaquehacerencasode
quequierapagarporelrescate.

En la lnea 28 se ejecuta la funcin que esta encargada de dejar el script que es capaz de descifrar los
archivossecuestrados.

Ahoradebemosagregaralcdigolasfuncionesnecesariasparasecuestrarelcomputadordelavictima:
FuncinsendCred()

LaLnea31sedenelafuncinyseesperarecibir3parmetrosqueanteriormentecargamosenelscript,
primero la URL del servidor recolector de victimas, la clave generada anteriormente y el ID de la
maquina. Luego de tener estos parmetros se prepara la peticin que se va a realizar al servidor
recolector.

Enlalnea32,sepreparanlosparmetrosquesevanarecibirpormtodoPOST.

En la lnea 33 al estar todo listo y formateado, se enva la peticin HTTP y nos comunicamos con el
servidor.

Enlalnea34seleelarespuestadelservidor.

Enlalnea35severicasilapeticinHTTPtuvounerrorenlaentrega,siesas,secierraelprogramay
nosesigueadelante.

Funcincrypt()

En la lnea 38 se dene la funcin cryp() y se solicita dos parmetros para poder realizar la tarea de
cifrar,elprimeroeslalistaconlosdirectoriosyelsegundoeslaclavequesegenerodinmicamente.

Enlalnea40y41severicaylavariabledirectoriorecibidacomoargumentoesdeltipoobjetoLista,si
noesas,seentregaunmensajeysecierraelprograma.

Enlalnea43serecorrelalistadedirectoriounaporuna,sinosabesdebuclesenPython,terecomiendo
les el siguiente articulo hps://cybersecuritylaboratory.wordpress.com/2016/09/26/buclewhileyfor/
(hps://cybersecuritylaboratory.wordpress.com/2016/09/26/buclewhileyfor/)

Enlalnea44seingresaaldirectorioentregadoporelciclofor.

Enlalnea45secomprimetodoloqueestaenesacarpeta.
Enlalnea45secomprimetodoloqueestaenesacarpeta.

Enlalnea46seeliminantodoslosarchivosdelacarpetavisitada.

Enlalnea47seeliminantodoslosdirectoriosdelacarpetavisitada.

Enlalnea48secifranelarchivoencrypted.tarysetransformaaformatogpg

Enlalnea49seeliminaelarchivocomprimidoencrypted.tarysedejasolamenteelarchivoelarchivo
encrypted.tar.gpg

Enlalnea50nosdevolvemosundirectorio.

Funcinhowto()

Enlalnea53sedenelafuncinyseesperan3argumentos,losdirectorios,ladireccindebitcoinyel
precioapagar.

De la lnea 54 a la 61 se crea la variable txt que contiene las indicaciones a seguir despus de ser
infectado.Paranoconfundiranadie,lanomenclatura+=sirveparaconcatenartexto.

Enlalnea62secreaundocumentollamadorecuperarmisarchivos.txt.

Enlalnea63seescribeloqueestadentrodelavariabletxt,eneldocumentorecuperarmisarchivos.txt

EnlaLnea64secierraelpunterodeldocumento.

EnlaLnea65y66secopiaestetextoencadacarpetaquefueinfectada.

FuncinDecryptGen()
EnlaLnea69sedeclaralafuncinparadescifrarlosarchivossecuestrados,recibecomoargumentolos
directorioscifrados.

DelaLnea71a85seescribeelcdigofuentenecesarioparadescifrarlosdirectoriossecuestrados.

Enlalnea86secreaelarchivodecrypt.py

Enlalnea87seescribeelarchivoconelcodigofuente.

Enlalnea88secierraelpuntero.

Si no manejas el manejo de archivos en Python te recomiendo leer este articulo


hps://cybersecuritylaboratory.wordpress.com/2016/10/20/manejodearchivosenpython/
(hps://cybersecuritylaboratory.wordpress.com/2016/10/20/manejodearchivosenpython/)

Lalnea91colocamosenformadelistalosdirectoriosquequeremoscifrar,enestecasoestntodosen
espaol,elsistemaoperativoqueestoyusandoestaconguradodeesamanera.Sinosabesqueesuna
lista y como se manipulan en Python te recomiendo leer este articulo
hps://cybersecuritylaboratory.wordpress.com/2016/09/06/agrupaciondedatoslistastuplasdiccionarios/
(hps://cybersecuritylaboratory.wordpress.com/2016/09/06/agrupacionde
datoslistastuplasdiccionarios/)

Directoriosacifrar
Enlnea92dentrodelascomillassimples,escribimosnuestradireccindeBitcoin.

Enlalnea93dentrodelascomillassimples,escribiremoselprecioquesedebepagarporlosdatos.

En la lnea 94 dentro de las comillas simples, escribiremos la Url de nuestro servidor donde estamos
guardandolascontraseasdeloscomputadoresinfectados.

En la lnea 97 se pregunta la maquina en la que se esta ejecutando este script es de SO Linux, si la


respuestaessi,seejecutalafuncinLinux(),sinosabesdeestructurasdecontrolyfuncionesenPython,
terecomiendoleaslossiguientesartculos:

hps://cybersecuritylaboratory.wordpress.com/2016/09/15/estructurasdecontrolifelseyelif/
(hps://cybersecuritylaboratory.wordpress.com/2016/09/15/estructurasdecontrolifelseyelif/) o/y
hps://cybersecuritylaboratory.wordpress.com/2016/10/04/funcionesenpython/
(hps://cybersecuritylaboratory.wordpress.com/2016/10/04/funcionesenpython/)

EnlaLnea99sepreguntasielSOesWindows,silarespuestaescorrectaseenvaunmensajeyseel
script deja de funcionar, terminando el programa. Cabe sealar que estas validaciones estn por si se
quierehacerqueestescriptseamultiplataforma.

Enlalnea101seejecutasielSOesdistintoaWindowsyLinux,envaunmensajeenpantallaytermina
elprograma.

PreparandoelServidorrecolectordecomputadores
secuestrados.

Loprimeroquedebemoshaceresinstalarenunamaquinalossiguientescomponentes,yovoyusarla
Loprimeroquedebemoshaceresinstalarenunamaquinalossiguientescomponentes,yovoyusarla
mismamaquinavirtualparaahorrartrabajo,peroustedeslopuedenhacerencualquierotroservidor:

InstalarServidorApache:

sudoaptgetupdatesudoaptgetinstallapache2

InstalarServidorMysql

sudoaptgetinstallmysqlserver

InstalarPHP5

sudoaptgetinstalllibapache2modphp5php5php5mcryptphp5mysql

Yateniendoloscomponenteslistos,vamosacrearunabasededatosparaalmacenarlosdatosrecibidos
porlasvictimas.

EscribimosenlaTerminalelcomandomysql

Luegoprocedemosacrearlabasededatos:

mysql>CREATEDATABASEransomware_db;

Procedemosautilizarestabasededatosparacrearunatabla:

mysql>USEransomware_db;

Creamoslatabladondeguardaremoslosregistros:

mysql>CREATETABLEvictimas(IDintNOTNULLAUTO_INCREMENT,

IDDvarchar(35),
PASSvarchar(35),
PASSvarchar(35),

PRIMARYKEY(ID));

Yacreadalabasededatos,procedemosacrearunprogramaquerecibalosdatosylosguarde.Paraeso
entramosaeldirectorio/var/www/o/var/www/htmlycreamosunarchivollamadodatosvictima.php

Delalnea2alalnea5sellenanlasvariablesconlosdatosdeconexinamysql.

Lalnea6y7delcdigo,serecibenpormtodoPOST,lasvariables(idyclave)quesegeneraronenla
victimayqueseenviaronalcifrarsumaquina.

Lalnea9sepreparalaconexinconlabasededatos.

Enlalnea11secompruebasisepuedoobtenerunaconexinconlabasededatosanteriormentecreada.

Enlalnea14,sepreparalaconsultaSQLqueguardalosregistrosidyclaveenviadoporlavictima.

En la Lnea 15 se comprueba que se guardaron correctamente los datos y se enva un OK. Al script
cuandorealizalapeticinHTTP.

Lalnea17seejecutasiesquealgnerrorocurrialejecutarlaQuero.

Lalnea20cierralaconexinconlaBasededatos.

Ejecucindelransomware.py

ParaejecutarelscriptabrimoslaTerminalyescribiendolosiguiente:

pythonransomware.py
pythonransomware.py

Sitodosalebien,nosdeberaentregarunresultadoparecidoaeste:

Vericamosenalgunadelascarpetassealadasenlalistasiseencuentranlossiguientesarchivos.Enmi
casotodosaliobien.

Procedoaabrirelarchivorecuperarmisarchivos.txtyconrmoquetodoestabien:

Ahoraparavolverarecuperarnuestrosarchivosnesecitamoslaclavequegeneroelprograma
Ahoraparavolverarecuperarnuestrosarchivosnesecitamoslaclavequegeneroelprograma
automticamente,paraestonosvamosanuestrabasededatosyescribiremoslasiguienteQuery
SELECT*FROMvitimas

Copiamosesaclaveybuscamoselarchivollamadodecrypt.py

Ejecutamoselarchivoconelsiguientecomando:

pythondecrypt.py

Yvemosqueelscriptnossolicitaingresarlacontrasea:
Nos va a pedir varias veces que ingresemos la contrasea, este proceso se repite segn la cantidad de
directorioscifradostengamos.

Elresultadonaldeberaversedelasiguientemanera:

Conrmamosquetodosedescifrocorrectamente:
Conrmamosquetodosedescifrocorrectamente:

Yconestodamospornalizadalapruebadeconcepto.

Paralosperfeccionistasquesiempreencuentranalgomaloenelcdigo,sequeesspermejorableyme
disculpoporeso,perodecidhacerlosimple,paraquecualquierpersonalopuedaentender.

LedoylasgraciasalPatopormotivarmeaescribirdeestetema.

PorrecomendacindeJaime,dejoloslinkparaquepuedandescargarelcdigofuenteescritopormy
as,puedanhacersuspropiaspruebasdeconcepto.Lesrecomiendoloejecutenenunamaquinavirtualy
porfavornohagandaoconesteconocimiento.

Linkproyecto:hps://gist.github.com/anonymous/ac8b5cc1eca260376cd6925dd078aaba
(hps://gist.github.com/anonymous/ac8b5cc1eca260376cd6925dd078aaba)

ParaDudas,Consultas,Reclamos,Felicitaciones:cyslabs@gmail.com(mailto:cyslabs@gmail.com)

Acercadeestosanuncios(https://wordpress.com/aboutthese
ads/)
Office365Personal

PEN219,99 Comprar

Office365Personal
(renovacin)

PEN219,99 Comprar

8DICIEMBRE,2016
7COMENTARIOS
7comentariosenCreandounRansomewaredesde0
conPython

ANONIMOUS
muybuenarticulo,elunicoproblemaqueveoesquedebesponerlaipdelservidoryconesoyate
puedesmeterunpedoxD,esosesolucionaeliminandoelscriptluegodecifrarlosdatosdela
victima.ypodriasusarvariosservidoresunorecibelosdatosylosenviapormediodePOSTauna
listadeservidoresquepuedenircambiandodeipsxDnoseesosemeocurreami.

9DICIEMBRE,2016ALAS12:02AM
RESPONDER
JAIMEIVAN
Muyinteresante=)voyportarloaPerl

9DICIEMBRE,2016ALAS12:05AM
RESPONDER
GATO
Excelentearticulo.

Felicitaciones

9DICIEMBRE,2016ALAS12:15PM
RESPONDER
USUARIO
Espectacular!
Felicitaciones

9DICIEMBRE,2016ALAS1:46PM
RESPONDER
TIPSYTECNOLOGIA
Fenomenalamigo,tefelicitoporcompartirtusconocimientosconlosdems,esmuyinteresantever
lascosasquesepuedenhacerconlaprogramacin,yencimaconPython meinteresanmuchoeste
tipodetemas,esperoquesigaspublicando,saludos..!

9DICIEMBRE,2016ALAS5:50PM
RESPONDER
ABRAHAMAVILA
Queinteresantearticulo,voyaprobarestemetodoyteharesabermisobservaciones,leyendo
rapidamentesemihizofacil,yaquesoyunusuarioLinux(Fedora)

9DICIEMBRE,2016ALAS6:50PM
RESPONDER
D1MITRI

Buenas,siquieresevitarteelservidoryoloqueharasimplementeescifrarlacontraseaconclave
Buenas,siquieresevitarteelservidoryoloqueharasimplementeescifrarlacontraseaconclave
publica(PGP)aadiendounclavepublicaenelejecutable.Deestaformacifraslacontrasea
aleatoriaquehasgeneradoparacifrardeformasimtrica.Luego,paradescifrar,simplementequete
envienelcheroconlacontraseacifradaysolotpodrsdescifrarloyenviarleselejecutableconla
contrasea(yadescifrada)paraquelavictimapuedadescifrarloscheros.Comohaypocagenteque
paguenotellegarnmuchoscorreos.

9DICIEMBRE,2016ALAS11:48PM
RESPONDER