랜섬웨어를 만들어보자! [Part 1] / How to make a ransomware?

2018. 7. 15. 22:05Develop/Python

728x90

 Thumbnail


 YouTube






 Item for ready
    • Pycrypto : 파이썬 암호화 모듈 RSA, AES, Sha256등을 지원
    • Python3 : 파이썬으로 만드니 당연히 파이썬이 필요!

Python 2.* 에서는 Crypto Library가 pycrypto로 사용하지만, 

 - Python2를 사용하여 pycrypto 설치시 오류가 발생한다면, 

["Net Framework 3.5 SP1", "Visual C++ 2008 Compiler"] 를 설치하셔야 합니다.


Python 3.* 에서는 pycryptodome를 사용합니다.

 - Python3를 사용할 경우 pycryptodome가 안된다면 pycryptodomex를 사용하시면 됩니다.

 - 그마저도 Install Error가 난다면 'Visual c++ Build Tools 14↑' 이상을 설치하셔야 하며,

   MS Visual Studio Community Version을 다운받아 C++ 빌드와 Python 네이티브 빌드를 설치하셔야합니다.


Python Anaconda를 사용할경우 따로받으실 필요는 없습니다. 이미 해당 라이브러리가 포함되어있습니다.



Python은 대체로 2가지 방법을 통해서 라이브러리 및 패키지를 다운로드 및 설치를 진행할 수 있습니다.

    • pip(Python Installer Package, ['wheel'을 이용']) 
    • setuptools (easy_install, ['Egg'파일을 이용'])


근래에는 PIP만으로 왠만한걸 받을 수 있지만

오래전에 만들어진 패키징 파일들은 대체로 python setup.py install --user 를  사용하여 설치를 하는것이 setuptools를 이용한 방법입니다.

pip에도 setup.py 처럼 사용하는 pip install requirements.txt 등이 있지만 

requirements와 setup.py는 명확하게 다른 역할을 합니다.







.








 Install Pycryptodomex

저는 Pycharm을 애용하고 있으며, Pycharm을 통해서 설치를 진행하도록 하겠습니다.


[Image 1-1]



[Image 1-2]


Pycharm 내에서 Ctrl + Alt + s  를 누르면 설정창이 나오고,

대개의 경우 Project Interpreter가 기본 첫 화면으로 보여지고 있으며, 

현재설치된 모듈목록과 추가/제거 가 가능합니다.







[Image 1-3]

모듈을 추가하기 위해 우측 + 아이콘을 클릭합니다.







[Image 1-4]

Available Packages 라는 새로운 창이 나타나며, 상단에 검색에

설치하고자 하는 'cryptodomex' 모듈을 검색합니다.








[Image 1-5]

좌측 하단에 Install Package 를 클릭하여 설치를 진행합니다.







[Image 1-6]

오류 없이 정상적인 설치가 된다면 'Image 1-6'처럼

하단에 Package 'pycryptodomex' installed successfully 라는 문구가 출력됩니다.






.





 Ransomware Code Write

[Image 2-1]

랜섬웨어 관한 코드는 이미 Github에 많은 자료들이 있으며,

사실상 복호화를 못하게 하는 수준이라면 더짧게도 가능합니다.


저는 그중에 'marcosValle' 라는 분께서 작성한 RansPy를 이용하였습니다.

marcosValle Github : https://github.com/marcosValle

RansPy - enc.py : https://github.com/marcosValle/RansPy/blob/master/enc.py










[Image 2-2]

해당 코드를 전체 복사 후







[Image 2-3]

Pycharm에 붙여넣습니다.



.






 Code Analysis





.








 Error 수정

[Image 3-1]

ModuleNotFoundError : No module named 'Crypto' 라는 에러 출력시

from Crypto import Chipher => from Cryptodome import Chipher 로 변경하셔야 합니다.

원본 제작자는 Python2를 사용한 것 같네요.








[Image 3-2]

변경 된 모습








[Image 3-3]


TypeError : Object type <class 'str'> cannot be passed to C code % type ...

해당 에러는 말그대로 타입 에러죠

문자열과 같이 사용할 수 없다는 내용인데 코드상에 잘보시면 Key 값을 문자열로 그대로 넣고 있는것을

볼 수 있습니다.

문자열 앞에 b를 작성하여 바이너리로 선언해줍니다.








[Image 3-4]

key값을 binary화 한 모습








[Image 3-5]

암호화 테스트를 진행해보기 위해 암호화를 진행할 대상 경로를 설정하고,

Decrypts the Files 라고 주석이 작성된 부분 하단에

반복문을 주석처리한뒤 실행해주시면







[Image 3-6]

Image 3-6 처럼 암호화가 된것을 볼 수 있습니다.

영상 자막과 음성에서는 '공개키 방식의 RSA 암호화를 사용' 이라고 표기 및 언급하였는데,

코드를 분석해본결과 RSA가 아닌 대칭키방식의 AES를 사용하였고,


둘의 암호화 방식은 다르며, RSA는 소인수 분해를 사용하여 키값의 경우의수가 너무 많아,

양자컴퓨터가 없이는 뚫기 힘들다는 연산을 가지고있죠..

몇주 몇달간의 GPU Crack을 통해 연산을 진행하여 키값을 얻어낸다고 가정한다면

키값이 10분마다 바뀌면 이또한 무용지물이겠죠..? App suite가 생각나네..


AES를 사용한데 있어서 이유는 아마도 테스트 결과 암호화 속도차이가 큽니다.

RSA로 커스텀하여 테스트를 해보신다면 AES를 사용했을때와 비교적 많이 느리다는것을 체감이됩니다.









[Image 3-7]

암호화된 파일을 열어재껴보면,

파일 내용이 깨져있는것을 볼 수 있습니다.


다시 복호화를 진행하기 위해 Image 3-5와는 반대로

암호화 코드를 주석처리후, 복호화코드의 주석을 해제합니다.








[Image 3-8]

복호화 코드 주석해제 모습




.






[Image 3-9]

복호화 완료된 모습


실시간 암/복호화를 보고싶으시다면,

YouTube 및 Facebook 영상을 참고해주세요!



본문이 도움이 되셨다면


블로그 하단에 있는 공감 & 좋아요 버튼 클릭!

&&

유튜브 영상 및 페이스북 페이지

구독과 좋아요도 한번씩 눌러주시면 매주 양키를 만나실수 있습니다!



 Facebook




728x90