남기면 좋잖아

3장 정보 수집 단계 본문

Penetration testing/Kali Linux

3장 정보 수집 단계

Beautiful Hugo 2017. 5. 17. 11:49
반응형

 - Contents -


3.1 호스트 확인 과정

3.2 네트워크 스캔 과정





안녕하세요. 

3장에서는 칼리 리눅스에 포함돼 있는 도구 중에서 호스트와 네트워크 정보를 획득하는데 사용할 수 있는 도구를 알아 볼껍니다.


모의해킹의 첫번째 단계인 정보 수집 단계는 DNS 정보 수집, 호스트 정보 수집, 네트워크 정보 수집, OS 정보 수집 등이 이뤄지는 단계입니다.


실무에서는 정해진 공격 대상이 있기 때문에 이 단계가 무의미 할 수 있습니다. 따라서 공격 대상이 외부에 노출되는 정도만 집중적으로 수집하고 취약점 진단 단계로 넘어갑니다.


일단 현재 칼리 리눅스에서 제대로 동작하는 툴들로 소개해드리겠습니다.








3.1 호스트 확인 과정




정보 수집의 첫 번째 카테고리는 네트워크 환경 분석입니다.

대상 서버의 도메인과 거기에 연결돼 있는 감춰진 네트워크 정보들을 알아내는 단계입니다.

취약점 진단 대상으로 정보를 획득할 때 해당 도메인 정보가 동일 네트워크에 포함돼 있는지, 

혹은 연관된 서비스가 맞는지 파악할 필요가 있습니다.





3.1.1 DNS 정보 수집



첫번째로 DNS 정보 수집에 관한 툴을 소개해 드릴텐데, 

DNS 정보를 수집할 때는 실습 대상에 DNS 서버가 구축돼 있어야하죠.

하지만 DNS 서버까지 구성하려면 시간이 많이 소비될꺼에요.


그래서 포상제 제도가 구축돼있는 구글이나 야후같은 서버를 대상으로 실습하시면 될 것같습니다.


책에서 소개된 DNS 정보 수집툴(2017.1 amd64버전)은 dnsmap, dnsrecon, fierce, lbd 가 있습니다.

허나 저는 모든 툴을 설명하기보다 역할이 중첩이 되는 경우엔 제가 생각하기에 대표적인 툴한가지를 골라서 소개해 드릴 예정입니다.

제가 소개해드린 툴 외에도 다른 툴이 궁금하시다면 "칼리리눅스와 백트랙을 이용한 모의해킹" 책을 참고하시면 되겠습니다.



3.1.1.1 dnsmap : DNS 정보 수집


dnsmap은 맥 OS, 리눅스용 오픈소스 소프트웨어로, 사전 파일을 사용하여 하위 도메인의 존재를 확인하며, 하위 도메인 정보를 빠른 속도로 수집하기에 매우 적합한 도구입니다. 

같은 카테고리에 dnsenum, dnswalk 도구도 있는데 유사한 방식으로 정보를 획득하구요.


 옵션

설명 

-w 

사전 파일 이용하기 

-r 

결과를 정규식으로 저장 

-c 

결과를 CSV 형식으로 저장 

-d 

millisecs 단위로 보기 

-i 

IPS 무시(IPS가 오탐할 수 있는 경우 유용하게 사용) 



다음과 같이 간단한 명령을 통해 정보를 수집합니다.


#dnsmap <www를 제외한 도메인> <옵션>


그럼 dnsmap은 사전파일에 있는 문자열과 도메인을 비교하고 결과 내용은 순서대로 DNS 쿼리를 요청해 응답이 오는 내용에 대해서만 IP와 같이 결과로 출력해줍니다.




3.1.1.2 lbd : 네트워크 로드밸런싱 정보 확인



lbd ( Load Balancing Detector ) 는 해당 도메인의 DNS/HTTP 서버가 로드밸런싱으로 구성돼 있는지 확인하는 도구 입니다.

로드 밸런싱은 부하 분산이라는 용어를 사용하며, 서버에 한 번에 접속이 증가하여 서버 부하가 발생하면 한두대의 서버로 정상적인 서비스를 할 수 없겠죠.  

따라서 여러 대의 서버를 병렬 형태로 운영하여 서버들로 균등하게 처리될 수 있게 분산해서 할당하는데요. 

이것이 바로 로드밸런싱입니다.


lbd는 특별한 옵션없이 실행할 수 있습니다.


#lbd <도메인>



제 취약서버에 확인한 결과 DNS, HTTP 서버 모두 로드밸런싱으로 구성돼 있지 않았습니다. (당연한 결과죠 ㅎㅎ 로드밸런싱 설정한적이 없기에...)

만약 로드밸런싱이 발견된다면 각각의 서버들마다의 아이피와 응답 차이도 확인할 수 있습니다.







3.1.2 실 호스트 확인



앞서 설명한 것은 내부 및 외부 네트워크 대역에서 진단 대상의 범위를 정하기 위해 DNS 정보를 수집하는 단계이며, 

이렇게 수집된 범위의 대상이 실제 어떤 경로를 통해 서비스 중인지 판단해야 합니다.

이번에는 도구들을 활용해 실제 서비스의 작동 여부와 포트 정보를 확인하는 방법을 소개해 드리겠습니다.




3.1.2.1 traceroute : 네트워크 정보 확인


traceroute는 클라이언트가 인터넷을 통해 특정 호스트를 찾아가면서 거치는 라우터를 기록하는 유명한 도구입니다.

그래서 인터넷상의 문제가 있는 네트워크를 파악하고, 네트워크의 연결 상태를 좀 더 자세히 파악하는 두 가지 목적을 위한 편리한 도구죠. 다른 유틸리티엔 ping, 0trace가 있습니다.


이 traceroute는 우리가 생각하는 것보다 굉장히 많은 옵션들을 가지고 있는데 상황에 따라 옵션을 찾아가며 사용하시면 되겠습니다.


#traceroute <-옵션> <대상>




3.1.2.2 hping3 : 서비스 동작 여부 확인


hping은 TCP/IP 프로토콜에 대한 무료 패킷 생성기이자 분석이 입니다. 보안감사, 방화벽과 네트워크 대역 테스트 도구중 하나이고, 현재는 엔맵 포트 스캐너에서 네트워크 스캔 기술을 악용하는 데 사용 됩니다.

현재 칼리리눅스에서의 hping은 hping3 로 업데이트 되어있는데, Tcl 언어를 사용하고 TCP/IP 패킷의 문자열 기반으로, 아주 짧은 시간에 사람이 읽을 수 있는 설명을 위한 엔진을 구현합니다.


#hping3 <-옵션> <대상>


별옵션 없이 기본적인 명령을 했을땐, 마치 ping과 매우 흡사하다고 생각하실 수도있는데 
와이어샤크로 확인해보면 기본적으로 ICMP가 아닌 TCP 패킷을 전송하게 됩니다.

개인적으로 hping이 되게 흥미롭다고 생각한것이,

 

이런식으로 대상에 대해 포트스캔 기능을 구현할 수 있었습니다.

위 명령을 잠깐 해석해보자면 "--scan 모드로 1~300번 포트까지 SYN 플래그(-S)로 대상서버를 점검하라" 로 보시면 될것같은데요.

이 외에도 패킷을 생성하고 그 결과를 확인할 수도 있고, 특정 포드로 ping을 보낼 수도 있는 등 여러가지 상황에 따라 쓸 수 있을것 같단 생각이 듭니다.




3.1.2.3 netenum : 호스트 정보 확인


netenum은 호스트 목록을 생성하는데 사용하는 도구로,  사용자에게 호스트 목록을 매우 빠르게 보여주는 기본적인 Ping-Sweep 및 열거 도구입니다.

이 도구는 타임아웃을 제공하여 살아있는 호스트를 찾기 위해 ICMP 에코 요청을 사용하고, 만약 타임아웃을 지정하지 않으면 살아있는 아예 모든 호스트를 출력하게 되어 오탐을 일으킬 수 있습니다.( 잠시후 보여드리겠습니다.)

만약 자신이 관리하고 있는 서버 대역이 많을 때에는 서비스 중인 현황이 제대로 파악이 안될 수 있는데, 이런 상황에서 netenum 도구와 스캔 도구들을 활용하면 업무시간에 상당한 도움이 되겠죠.


#netenum <스캔하고자 하는 네트워크 대역> <타임아웃> <verbosity>



위 사진을 보시면 첫번째는 타임아웃을 "3"으로 지정하고 마지막엔 지정하지 않은 모습입니다. 차이가 느껴지시나요?

네. 타임아웃을 지정한 쪽엔 실제 살아있는 호스트들을 보여주고 있지만, 지정하지 않은쪽엔 아예 모든 호스트 IP를 나열해 버린모습을 볼 수 있었습니다.


명령을 실행해보시면 아시겠지만 굉장히 빠른속도로 결과가 나오는데요, 그만큼 신뢰성은 많지 않지 싶습니다.

이 정보가 모두 정확할 순 없기 때문에 재확인이 필요할 것 같고, 

실제 제가 했을때도 저 호스트IP보다 많은 IP를 쓰고있었음에 불구하고 5개이외에는 나오지 않았습니다.ㅜㅜ

허나 이 netenum과 같이 간단한 스크립트를 이용하면 자신이 관리하는 모든 대역에 대해 작동여부를 판단할때 사용할 수 있겠습니다.







3.2 네트워크 스캔 과정




앞 에서는 선택한 대상의 정보가 실제 서비스되고 있는지, 네트워크 대역에 대해 알아 봤습니다.

이번에는 확인한 대상에 대해 네트워크 전달이 어떻게 진행되는지 상세히 보도록 하겠습니다.



3.2.1 unicornscan: 네트워크 정보 수집


Unicornscan은 보안 연구 및 테스트 커뮤니티의 구성원들에 의해 만들어진 정보 수집 도구입니다. 상관관계 엔진을 이용하여 정확하며 유연하고 효율적인 엔진을 제공하게 설계됬다고 합니다.

이 도구의 많은 기능 중에서 가장 큰 특징은 확장성인데요. 예를 들어 전송할 초당 패킷 수를 높게 정의해 스캔을 빠르게 수행할 수 있습니다.

하지만 네트워크 과부하를 유발할 수도 있으므로 전송할 초당 패킷 수를 높일 때는 주의를 기울여야 합니다..기본 PPS 값은 300입니다.


#unicornscan <-옵션> <스캔하고자 하는 네트워크 대역>





예를 들어, 위처럼 취약서버의 1~10000 포트에 대해 TCP 스캔을 하고자 하면 기본적으로 40초가 걸린다고 하는데요.

바로 밑에 명령으로 -r 옵션으로 PPS 값을 100000으로 증가시켰을때 걸리는 시간은 7초로 대폭 감소가 됩니다.

그런데 빠른만큼 뭔가 정확도는 떨어지는지, 열린 포트를 2개밖에 발견하지 못했습니다.

하지만 한 호스트가 아닌 네트워크 대역을 대상으로 할때는 시간상 아주 효율적으로 사용할 수 있겠지요..


-r 옵션을 쓰실때 주의하실점이 위에도 언급했지만 네트워크 과부하가 걸린다는 겁니다.

저 명령들을 실행하기전에 제 호스트 네트워크 대역대를 대상으로 PPS값을 100000 으로 지정후 스캔을 했을때 제 실제호스트 자체가 다운이 되서 강제 재부팅을 겪게 되었습니다..(덕분에 포스팅을 다시 쓰고 있습니다..) 

그후 대역대가 아닌 한 호스트대상으로 테스트를 해보았구요..

아무튼 주의하셔서 사용해야 될것같습니다!




3.2.1 scapy : 네트워크 패킷 조작


scapy는 강력한 기능을 가진 뛰어난 패킷 조작 도구이며, 수많은 프로토콜의 디코딩 기능과 수정된 패킷을 전송할 수 있습니다.

이 도구의 가장 큰 특징은 다양한 기능을 수행할 수 있다는 점입니다. 

예를 들어 네트워크 스캐닝, 패킷 덤프, 공격 패킷을 만든다고 가정하면 이 모든 것이 scapy 하나만 있으면 가능합니다.

scapy는 파이썬을 기반으로 작성되어 익숙하지않으면 사용할 때 힘들다고 느껴지실 수 있습니다.


1. scapy 실행


#scapy




2. scapy 실행 가능한 명령 확인하기


>>>lsc()


3. scapy 현재 지원하는 레이어 형태 확인


>>>ls()


4. scapy 환경설정 확인


>>>conf


5. scapy 환경설정 변경


>>>conf.변수= '값'


예를 들어 iface의 네트워크 인터페이스를 eth0로 바꾸고 싶으면


>>>conf.iface = 'eth0'


이런식으로 scapy를 사용해주시면 됩니다. 


간단한 예시로 scapy로 traceroute 기능을 사용해본다면,


>>>traceroute("목적지")



위처럼 결과를 아주 빠른 속도로 출력해 줍니다.



이 외에도 wireshark 처럼 패킷을 스니핑할 수 도 있고, 패킷 하나하나를 자세하게 HEX값으로도 볼수 있고 기능들이 무궁무진 한것 같습니다.

시간되시면 scapy는 한번 찾아보셔서 다양한 기능들을 테스트해보시는걸 개인적으로 추천드리고 싶습니다.

scapy 해당 홈페이지 올려드리겠습니다. (http://www.secdev.org/projects/scapy)







드디어 3장이 끝이 났습니다. 이번 3장에서는 정보 수집 단계에서 사용할 수 있는 도구를 살펴봤습니다.

어떤 환경과 서비스를 대상으로 하느냐에 따라 쓰임은 다르고 그만큼 사용될 수 있는 도구도 무수히 많겠죠.


제가 다루지 않은 툴들도 많이 있으니 그때그때 상황에 따라 찾아가면서 정보를 획득하는게 중요할 것같습니다.


4장에서는 3장에서 획득한 정보 외에 노출될 수 있는 정보에 대해 추가적으로 살펴보는 것으로 할 것이고,


저는 여기서 이만 마치도록 하겠습니다. 다들 좋은하루 되세요~

반응형
Comments