개인키 생성

openssl genrsa -out privatekey.pem 1024

개인키 정보 출력

openssl rsa -in privatekey.pem -text -out private.txt

modulus : 00을 제외하고 128개, 128*8 = 1024bit

prime1, prime2 : 00을 제외하고 64개, 64*8 = 512bit

modulus(N) = prime1(P) * prime2(Q)

공개키 : publicExponent(65537), N

개인키 : privateExponent(D), N

exponent1 : D mod (P-1)

exponent2 : D mod (Q-1)

coefficient : (inverse of Q) mod P

공개키 생성

openssl pkey -in privatekey.pem -pubout -out publickey.pem

공개키 정보 출력

openssl pkey -in privatekey.pem -text_pub


64비트 키 검증

http://www.mathpapa.com/algebra-calculator.html 로 계산 가능

Private-Key: (64 bit)

modulus: 00:c6:cf:f1:d2:1c:ba:3d:bb

publicExponent: 65537 (0x10001)

privateExponent: 0f:04:29:c9:88:d9:02:61

prime1: 3825875939 (0xe40a3be3)

prime2: 3744484937 (0xdf304e49)

exponent1: 553066949 (0x20f721c5)

exponent2: 2212512545 (0x83e04321)

coefficient: 2971090683 (0xb1173efb) 


p * q = modulus = 14325934824416231424 (C6CFF1D21CBA3DBB)




들어가며

필자는 이 노트북에 리눅스를 설치하기 위해 cent 7, fedora, ubuntu 를 설치해보았다.


cent 7.0 : 기본으로 제공하는 커널이 3.10이며 wifi 랜 카드를 설치하기 위해선 커널 패치가 필수이다.

그래픽 드라이버 설치 후 그놈 로그인 시 프리징 걸린다.

fedora : 부팅 시 프리징

ubuntu : 부팅 시 프리징, 그나마 제일 많은 Q/A가 인터넷에 있다. 그것을 토대로 설치하였다.


본 포스팅은 ubuntu 14.04.3 LTS 를 설치하는 법을 다룬다.


$ ubuntu 15.10를 설치하지 않는 이유 $

최신 디바이스 드라이버를 제공하며 별도로 랜 드라이버를 설치할 필요가 없으나,

그래픽 드라이버 설치 후 x window 로그인 시 에러가 발생한다. 이 이유를 xorg-server 버전의 문제로 생각하였으나,

352.63 드라이버가 1.18버전을 지원하고 ubuntu 15.10에는 1.17.2버전이 설치되어 있다. 미지원 버전 문제가 아님에도 에러가 발생한다.


# BIOS 에서 변경해야 할 몇가지가 있음

uefi with csm (uefi 시 부팅은 되나 프리징)

secure boot = disable (enable했을 시 설치 후 invalid 시그내처 문제로 부팅 안됨)

fast boot = disable

speed step = disable


# 설치 전

ubuntu 14.04.3 버전 cd 및 usb 삽입 후 부팅


grub 에서 install ubuntu 를 선택하고 e 를 눌러서 에디트 모드로 들어감

quiest splash --- 문장을 찾은다음 ---을 nomodeset으로 치환

F10으로 부팅


# 설치 후  


$ 부팅 시 멈출 경우 $

grub 메뉴로 빠진다음(부팅시 왼쪽 SHIFT키를 가만히 누르고 있으면 된다. 만약 그대로 프리징 될 경우 파워오프 후 될때까지 재도전)

#설치전 항목 수행 (메뉴로 빠지지 않고 가만히 놔두면 프리징 걸림)

부팅 후 sudo vi /etc/default/grub 을 치면

GRUB_CMDLINE_LINUX_DEFAULT="quiest splash"가 보이는데 splash 뒤에 nomodeset 추가

빠져나온뒤 update-grub으로 grub 갱신 후 재부팅

(만약 grub을 수정하지 않으면 ctrl_alt_F1 콘솔 진입 시 프리징이 걸린다.)


nvidia 드라이버 설치 후 nomodeset을 삭제한다.



1) wifi 드라이버 설치

https://wireless.wiki.kernel.org/en/users/Drivers/iwlwifi

이곳에서 Intel® Wireless 3165  드라이버를 다운로드 한다.

14.04.3은 커널 3.19버전을 사용하므로 적합한 버전을 다운로드 한다.


iwlwifi-3165-12.ucode <-- 이것을 받아도 무방하다.


압축 해제 후 파일명을 7265에서 3165으로 변경 후 /lib/firmware디렉토리에 복사한 후 재부팅하면 wifi가 잡힌다.

* 재부팅 없이 적용하는 방법

sudo modprobe -r iwlwifi

sudo cp iwlwifi-3165-12.ucode /lib/firmware

sudo modprobe iwlwifi


2) nvidia 드라이버 설치

lightdm을 별도로 종료하지 않아도 상관 없다. 

해보진 않았지만 lightdm 상의 소프트웨어 업데이트 기능으로도 가능할 것 같다.

sudo add-apt-repository -y ppa:xorg-edgers/ppa 

sudo apt-get update

sudo apt-get install nvidia-352 

reboot


재부팅 후 제대로 설치되었는지 확인해본다.

nvidia-settings


(인터넷 무수한 글을 살펴보면 nouveau를 disable하는것으로 보이지만 건들지 않아도 설치가 잘 되었다.)

(혹시 nouveau에 문제가 생기면 구글에 아주 많은 disable자료가 있다.)




우연히 발견했는데 XP에서는 RSA 1024bit 이하 인증서를 지원하는 반면 Windows 7에서는 디지털 서명 오류를 뿜어내는군요.

# Windows XP의 경우



# Windows 7의 경우

결론 : RSA2048을 사용합시다.

APMSetup에서 SSL(https)을 구축하는 방법을 설명합니다.


1. APMSETUP 설치

기본 값으로 설치합니다.

http://www.apmsetup.com/download.php


2. Openssl 설치

아래 파일을 다운로드하여 c:\openssl에 압축 해제합니다.

openssl.zip

본 포스팅에서는 스스로가 인증기관(CA)이 되어 셀프 서명한 루트 공개키 인증서를 만들어서 사용합니다.


1) 개인키/공개키 만들기

인증기관(CA)의 키를 생성합니다.

>> openssl genrsa -out CA_Private.pem


2) 인증서 서명 요청서 만들기

인증기관에 요청할 요청서(CSR)를 만듭니다.

>> openssl req -new -key CA_Private.pem -out CA_Request.pem

지역, 회사명 등을 순서대로 기입합니다. 마지막 아래 2칸은 비워도 무방합니다.


3) 공개키 인증서 만들기

요청서를 가지고 인증기관의 개인키를 사용하여 공개키 인증서를 만듭니다.


3. APACHE 설정파일 수정

1) c:\APM_Setup\Server\Apache\conf\httpd.conf

아래 2줄을 찾아서 주석을 삭제합니다. 

#LoadModule ssl_module modules/mod_ssl.so 

#Include conf/extra/httpd-ssl.conf 


2) C:\APM_Setup\Server\Apache\conf\extra\httpd-ssl.conf 

- Webroot 경로명 수정
DocumentRoot "C:/APM_Setup/Server/Apache/htdocs" 을 "C:/APM_Setup/htdocs"으로 수정합니다.

키파일 경로명 수정
SSLCertificateFile "C:/APM_Setup/Server/Apache/conf/server.crt" 을 "C:/openssl/bin/CA_Cert.pem"으로 수정합니다.
SSLCertificateKeyFile "C:/APM_Setup/Server/Apache/conf/server.key" 을 "C:/openssl/bin/CA_Private.pem"으로 수정합니다.


4. 구동 및 확인


C:\APM_Setup\Server\Apache\bin\ApacheMonitor.exe을 실행하여 재시작한 뒤 빨간 밑줄과 같이 ssl이 올라왔는지 확인합니다.

접속 후 인증서를 확인해봅니다.


개발환경 : Visual Studio 2013 / Windows 7 x64

Active X, 후킹모듈과 같은 브라우저용 DLL을 개발하다보면 로그 처리 및 타 프로세스와 연동할 일이 생기는데 기본적으로 브라우저는 낮은 Integrity를 가지고 있으므로 temp폴더 정도의 자원만 사용할 수 있습니다.

제가 만든 프로그램 (PIPESERVER.exe - High Integrity)에서 생성한 파이프는 브라우저(iexplore.exe - Low Integrity)에서 사용할 수 없습니다.

이를 해결하기 위해 각종 핸들(PIPE 등)을 생성할 때 SECURITY 관련 속성을 인자로 주어야 합니다. 

아래 예제 소스는 RPC 파이프를 이용하여 브라우저 DLL에서 EXE의 함수를 호출하는 것을 보여줍니다.

(아래 참조사이트들을 참고하여 작성하였습니다.)

# EXE (서버) Side


# DLL (클라이언트) Side

주의하여야 할 점은 RpcStringBindingCompose 함수의 인자로 local을 의미하는 "\\\\."을 사용하였는데 일반적인 경우는 "localhost"를 사용해도 상관 없지만 브라우저 DLL의 경우 반드시 "\\\\."을 사용해야 정상 동작합니다.


도움이 되는 참조 사이트

RPC 기본 샘플 예제

http://www.codeproject.com/Articles/4837/Introduction-to-RPC-Part

VISTA에서 Active X와 통신

https://www.blackhat.com/presentations/bh-usa-08/Kim/BH_US_08_Kim_Vista_and_ActiveX_control_WhitePaper.pdf



함수가 호출 될 당시의 콜스택을 확인합니다.
DEPTH를 5로 설정하면 5 DEPTH까지 호출한 주소를 출력합니다.
만약 디버거 없이 동적으로 콜스택을 확인하고 싶다면 이 방법을 쓰면 됩니다.
(후킹용 DLL 에서 유용할 것이라 생각됩니다.)

이 예제는 TestFunction() 이 호출될 당시의 콜스택을 보여줍니다. (최적화 안함)


샘플을 돌린 결과입니다. 출력된 호출 주소의 바로 윗줄이 실제 호출 주소입니다.



빌드 환경 : Visual Studio 2010
필요 헤더 : windows.h
윈도우즈 환경에서 Crypto API를 이용하여 손쉽게 MD5를 구할 수 있습니다.



먼저 PowerShell이 무엇인지 잠깐 짚고 넘어가봅니다.

윈도 파워셸(Windows PowerShell)마이크로소프트가 개발한 확장 가능한 명령줄 인터페이스(CLI) 스크립트 언어이다. 객체 지향에 근거해 설계되고 있어 닷넷 프레임워크 2.0을 기반으로 하고 있다. 이전에는 마이크로소프트 셸(MSH, 코드네임 Monad)로 불리고 있었다.현재 윈도 XP, 윈도 서버 2003, 윈도 비스타, 윈도 서버 2008, 윈도 7, 윈도 8, 윈도 서버 2008 R2를 모두 지원한다.

위키백과에서 발췌한 내용입니다.

그냥 쉽게 말하면 리눅스의 bash 같은 쉘입니다.

파워쉘은 Windows에서 기본으로 제공하는데 여기에 쉘코드를 인젝션 시키는 것이 가능합니다.

이는 타겟 시스템의 기본 자원을 가지고 공격을 수행할 수 있다는 것을 의미합니다. 

실제 동작을 확인하기 위해 Metasploit으로 파워쉘용 쉘코드 스크립트를 작성해보겠습니다.

메시지박스를 실행시키는 페이로드를 불러온 뒤 파워쉘 스크립트로 저장합니다.

 

스크립트 파일이 생성되었습니다.

파워쉘을 실행시킨 뒤 생성된 내용을 그대로 붙여 넣기 합니다. 해당 코드는 x86이므로 wow64 파워쉘로 실행해야 합니다. (Windows x64의 경우)

(wow64 경로 : c:\windows\syswow64\windowspowershell\v1.0\powershell.exe)

 

아래는 결과입니다.

스크립트를 보면 알겠지만 쉘코드 스레드를 생성하여 실행시키는 간단한 내용입니다.

위의 스크립트를 페이로드로 활용하기엔 2% 부족합니다. 이를 Veil-Framework로 간단히 해결할 수 있습니다.

https://www.veil-framework.com/

Veil-Framework에서 제공하는 파워쉘 옵션과 다양한 페이로드를 결합하여 강력한 파워쉘 페이로드를 생성할 있습니다. 

첫 실행화면입니다. 39개의 페이로드가 로드되었다고 나옵니다. 이를 list 명령어로 확인할 수 있습니다.

이제부터 동일한 기능을 수행하는 페이로드를 생성할 것입니다.

파워쉘 쉘코드 인젝션을 이용할 것이므로 use 21을 입력합니다. 

 Generate를 입력합니다.

 디폴트 옵션을 사용합니다.

쉘코드를 선택하는데 tab 키를 누르면 리스트가 나타납니다. 그림과 같이 windows/messagebox 를 기입 후 적당한 값을 입력합니다.

 저장할 파일 이름을 입력합니다. 해당 파일은 bat확장자로 저장됩니다.

성공적으로 파일이 저장되었습니다.

해당 배치 파일을 실행하면 메시지박스 창이 나타납니다.

 

공격사례 : 작년에 발표된 "godmode" 익스플로잇입니다.

GradiusX, b33f 닉네임을 사용하는 해커들이 기존 발표된 익스플로잇에 파워쉘을 얹었습니다.

여기에 사용된 파워쉘은 위 실습 내용과 같으므로 패치되지 않은 IE 브라우저에서 실행해보시길 바랍니다.

http://www.exploit-db.com/exploits/35308/

프로세스 트리를 살펴보면 iexplore.exe -> powershell.exe 형태입니다.

이처럼 커맨드라인 RCE 공격 형태에서 매우 효과적인데, JRE 공격의 경우 대부분이 커맨드라인 형태이므로 유용할 것이라 생각됩니다.

 

RSA 구조체를 PEM으로 변환하는 방법입니다.

파일 혹은 버퍼로 저장할 수 있습니다.

+ Recent posts