Beruflich Dokumente
Kultur Dokumente
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:
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.
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.
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