2016년 12월 9일 발표 합격


발표가 나오는 아침 상당히 떨렸다. 팝업 해제를 하지 않았을 때 9시부터 확인을 하였던 나를 보며 뭔가 약간은 기대를 했던 것 같다. 발표는 10시에 떴다. 예상 점수가 55~62를 감안하였을 때 확실하게 부분 점수가 있다는 것을 점수를 보고 확인할 수 있었다. 


공부 방법

필기: 1달 정도 공부를 하였다. 평일은 회사 업무로 인해 많이는 못하였고 주말에는 도서관에 가서 공부를 하였다. 필기는 확실히 많이 어렵지는 않다. 약간의 기본 base만 있으면 어렵지는 않다. 

책을 사는 것을 좋아하지 않아 회사 선배의 책을 빌렸다. 책은 알기사 2013년 필기 책이었다. 확실히 필기는 기본은 똑같다고 판단하여 13년도 책으로 공부를 하였다. 


위와 같이 요약을 하고 공부를 하였다. 약 30장 정도로 요약을 하였고 정보보안기사는 다른 기사 시험과 달리 시험 문제가 공개가 되지 않기 때문에 기출 문제를 풀기보다는 책으로만 진행을 하였다. 


실기: 막판 회사 업무로 인해 필기보다 적은 시간을 할애하였다. 지금 생각해보면 운이 정말로 좋았던 거 같다.

약 2주를 공부하였고 마지막 한 주는 거의 하지 못하여 마음이 불안하였다. 



필기와 마찬가지로 요약을 하였다. 책은 2015년 알기사 실기로 공부를 진행하였다. 필기와는 달리 키워드 위주로 진행하였다. 약 60개의 토픽으로 숙지하고 시험을 보았다. 알기사 책으로는 모든 것을 커버하기는 어렵다. 예를 들어 하트블리드의 snort룰 같은 경우에는 책으로는 알기 힘들다. KISA에서 발간하는 자료들은 한번씩은 보고 가는 것을 추천한다. 어차피 공격 유형은 많이 달라지지 않는다(시험). 다만 꼬아서 내는 문제가 많기 때문에 책은 기본으로, KISA자료는 참고용으로 보고 가면 어느정도 간당하게라도 합격하지 않을까 싶다.

또한, 리눅스 마스터를 사전에 공부해두면 상당히 유리한 것 같다.


원래 정보보안기사를 합격하면 CISA, CISSP을 공부하려고 했으나 굳이 할 필요가 없다고 생각이 들었다.

이제 기술사를...


다들 화이팅입니다!!!


-------------------------------------------------------------------------------------------------------------------------------

16년 11월 12일 토요일 정보보안기사 실기를 보고왔다.

악명 높은 정보보안기사 실기... 역시 어려웠다.

일단 범위도 너무 넓고 무엇보다 법쪽도 관련되어 있어 쉽지가 않다.


정보보안기사 실기는 총 15문제 (단답형 10개 30점, 서술형 3문제 각 14점, 실무형 3문제 중 택 2 각 14점)으로 이루어져있다. 


단답형 1번부터 난 스킵을 하였고 서술형에 디지털 포렌식이 나오면서 아 이번 시험은 끝이구나 라고 느낄 수 있었다.
(인쇄가 제대로 되었는지 확인하는 시간에 난 벌써 직감하였음..)


순서는 모르겠다만 우선 생각나는대로 적어보고자 한다.

기억나는 것 포함하여 http://wonylogs.tistory.com/40 글의 내용을 참고하였다. 이 분도 같이 합격했으면 좋겠다.

(우선 제가 쓴 답을 적을 것이며, 틀렸으면 댓글창에 달아주시면 반영토록 하겠습니다.)


단답형

1번. mysql 외부 접근자 막기 위한 명령어

-> 그냥 이 문제는 보자마자 스킵하였다. 왜냐하면 난 알지 못하기 때문이다.......

2. WEP 괄호 문제- 24bit(IV), 암호화 기법(RC4)- RC4는 취약하다고 지문에 나와있었던 거 같음

->IV, RC4

3. TCP 3Way handshake Syn-Ack 문제

->클라이언트가 1이라고 syn을 보내면 server가 2로 ack를 보내고 10이라고 Syn를 보내면

클라이언트는 Syn을 다시 2와 ack를 11이라고 보내는 형식으로 빈칸이 3개였던 거 같음

4. setuid 관련 문제 (real UID, Effective UID, Saved UID)

-> EUID, SUID를 처음 보았음. 그냥 첫 uid가 1000이라서 그 옆에는 1000으로 채우고 

   UID를 600으로 바꾸니까 real을 600 나머지는 0이라고 찍었음..

5. DNS 괄호 문제 (1)protocol() (2)저장하기 위한?() (3)유효시간()

-> UDP 프로토콜, 저장하기 위한 것에 zone이라고 적었는데 cache인거 같음. 유효시간은 TTL이라고 적음

6. ISMS 13개 도메인 

-> 빈칸으로 제출함 답은 2(정보보호 조직) 3(외부자 보안)  10(접근 통제) 임

7. 리눅스에서 Host 기반 침입탐지 시스템 작동 시 디렉토리가 어디인지(), ps가 지문으로 나옴

-> /proc 적으려다가 안드로이드 루팅하면 /sbin에 su파일이 생성되어서 /sbin이라고 했는데 ps면 /proc 인거같은데 왜 시험에는 안했는지 모르겠음..

8. 개인정보 지침 관련 안전성 확보 조치 ()는 연()회, ()를 해야함

-> 고유식별정보, 1회, ()        고유식별번호가 생각이 안나 민감정보라고 하였음. 1회는 맞은거같고 마지막 ()을 나는 안전성 확보라고 했는데 위의 링크분은 유출/변조/훼손이라고 하셔서 뭐가 뭔지는 잘 모르겠음..

9. 보안의 목표 

기밀성, 무결성 (가용성), (인증), (부인방지) 이건 워낙 기본이라 다들 맞았을 거 같다.

10. 위험 처리 방안

(수용), 감소, (회피), (전가) 이 또한 단골 문제이기 때문에.. 회피 전가는 빈칸 맞는거 같고 수용 감소는 어떤게 빈칸이었는지는 기억이 잘 안남


서술형

11. IPSEC

(1)동작 모드 차이점 적기(ESP 기준으로 하라고 했음)

-> 전송 모드와 터널 모드 그림 그렸음

전송 모드(ip header, esp header, ip payload, esp trailer, esp 인증)

터널 모드(new ip header, esp header, ip header, ip payload, esp trailer, esp 인증)

암호화 하는 부분이 다르다고 적었음. 예를 들면 터널모드에는 ip header까지 감싸기 때문에

종단 정보만 new ip header에 나온다고

(2)End To End, Host To Host

-> 그림이 나왔음. 하나는 공인 ip를 사용하는 host와 즉, 그냥 Host To Host 방식이고

나머지 하나는 G/w to G/w였음. 각각에 대해 위에서 언급한 동작 모드를 어디에 적용하는 것이 맞는지에 대한 선택과 선택한 이유에 대해 적는거

H-T-H는 전송, G-T-G는 터널 모드로 선택하고 이유는 그냥 아는대로 적었음


12. 게시판 업로드 가능시 공격방법에 아는 방법(?) 및 해결 방안(2가지)

-> 뭐 아는 방법(?)은 이것 저것 적었고 해결방안에는 .js와 같은 확장자는 못올리게, 즉 확장자 검사랑

나머지 하나는 파일을 올릴 때 실행 권한을 주면 안된다라고 적었던 거 같음


13. 디지털 포렌식 (chain of Custody) 5단계

-> 후.... 이 문제에서 당락 여부와 많은 사람들이 당황했을 거 같다.

증거물 보관의 연속성이라는 것은 보지도 않았다.

대충 찾아보니 무결성에 대한 것이고 5단계로는 정보수집-전송-분석-보관-보고서 작성

의 형태인거 같은데 나는 수집-계획 수립-분석-보고서-복구  라고 적었다...

지금 생각해보면 복구는 진짜 어처구니 없는 답변이었다. 그냥 복구를 안썼으면 대충 수집 분석 보고서 형식은 맞아서 약간의(?) 가산점을 기대해보겠다만 복구를 적는 바람에 0점이 아닐까 싶다...


14. snort

(1) 무슨 취약성

-> 로그형식이 alert any any <> any [443, 450, xxx,xxx,xxx] 이 있었고 content[xx,xx,xx] 이런식으로 로그를 보여주었다. 난 로그 분석은 이해가 안갔지만 14년도에 발생한 것이었다고 하고 443이 ssl이기 때문에 openssl 취약성이라고 생각하여 heart bleed(openssl 취약점) 이라고 적었다. 14년도에는 크게 허트블리드와 쉘쇼크(bash 버그 취약성)가 있었는데 맞았으면 좋겠다.

(2) 보안 장비를 사용하지 않고 해결방안(2가지)

-> 장비를 사용하지 않기 때문에 가장 필요한 것은 최신 패치 버전의 유지라고 적었다.

 나머지 하나는  난 openssl 취약점 즉 허트블리드라고 생각하였기에 허트블리드는 결국 오버플로우를 발생시키는 문제가 있었기 때문에 입력값 검증 및 오버플로우 대책에 대해 몇가지를 적었다.


15. Crontab

(1) 리스트 보는법

-> crontab -l    (-l옵션은 list 출력)

(2) 어떤 이름 주고 얘(xxx)를 수정하는 방법

-> crontab -e <xxx>    (-e은 edit)  

(3) 매주 일요일 3시 rm -rf <directory> 표준 출력은 /dev/null 로 보내고 표준 에러는 표준 처리로 redirect

-> 0 3 * * 0 rm -rf <directory> 

뒤에 명령은 틀린 거 같음 (쉘까지 나오다니..) rm -rf <directory> /dev/null 2 > 1

이라고 그냥 대충 적었던 거 같음. 이 부분은 모르기 때문에 패스


16. ISMS 인증 단계?

-> 실무형은 택2 이기 때문에 ISMS 라는 글자가 보이자마자 스킵처리


뭐 아는건 열심히 적었지만

가채점을 해보면 간당간당하다. 뭐 이것도 내 기준에서의 가채점이기 때문에(예를 들면 허트블리드) 사실상 탈락의 확률이 더 높다. 

그냥 어느 인자하신 채점자분을 만나 약간의 가산점을 받아 60점으로 통과했으면 좋겠다.


12월 9일 발표라고 하니 그때까지는 개인공부나 해야겠다.

이번에 보안기사를 끝내면 참 좋으려만...........

vmware에 ubuntu 16.04를 설치하였다.

하지만 윈도우 화면이 자동으로 맞춰주지 않아 보는 데 상당한 불편함을 느꼈다.

또한 아래의 사진처럼 이전까지는  install Vmware Tools... 가 활성화 되었던 것 같은데 16.04 탓인지, 오늘 윈도우 10을 업데이트 한 탓인지 뭐 아무튼 활성화가 되어 있지 않았다.


방법은 간단하다.

$sudo apt-get install open-vm-tools-desktop


위 한줄이 끝이다..ㅎ

아래처럼 설치가 된 것을 확인할 수 있다. View 탭에서 Autosize-Autofit Guest를 차례대로 클릭한다.



아래와 같이 사이즈가 변경되어도 해당 사이즈에 맞게 자동으로 조절 됨을 확인할 수 있다.

데스크탑을 바꾸게 되어 기존에 사용했던 vmware 를 재 설치하는 동안 황당한 일이 발생하였다.

bridge모드가 안잡히는것!


vmware network editor에서 새로 VMnet0을 추가하려고 하였으나 아래와 같이 에러 발생

에러내용: Cannot change network to bridged: There are no un-bridged host network adapters.

어댑터가 없다고 출력이 되어 확인하러 가보자.


네트워크 설정에 vmware bridge모드가 되어 있지 않았다..



네트워크 설정에서 설치를 누르고 서비스-vmware.inc 를 차례대로 클릭하면  아래의 사진처럼 bridge protocol 을 설치할 수 있다. 설치를 해준다.


그러면 아래와 같이 추가가 되었음을 확인할 수 있다.

동시에 vmware network 에디터에 자동으로 등록됨을 확인할 수 있다.



요약

1. $dmesg | grep eth0으로 renamed 된 것 확인

2. $sudo vi /etc/default/grub

3. GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0" 로 수정

4. $sudo update-grub

5. $sudo reboot


ifconfig를 입력하였는데 lo밖에 출력이 안된다?


우선 dmesg를 입력해보자.

$dmesg | grep eth0


출력 결과 enxxx, p5p1 등 이상한 이름이 출력되며 마지막에 renamed eth0을 확인할 수 있다.

위의 이상한 이름이란 predictable network interface names 이라는데 난 기존 방식의 eth0을 사용하고 싶었다.


또한 ifconfig -a 를 입력하면 위의 이상한 이름과 함께 ip, mac 등을 확인할 수 있다.

출력이 안된다면 네트워크 드라이버가 올라가지 않을 수 있기 때문에 insmod를 해야한다.


방법은 간단하다.

다른 페이지에서 찾아보니 rules를 바꾸거나 하는 방법들이 있었는데 16.04를 설치한 나에게는 적용되지 않았다.


eth0의 이름을 사용하지 않을 경우에는 vi /etc/network/interfaces에서 기존 방식의 

auto eth0

iface eth0 inet dhcp

에서 eth0이름을 해당 이름으로 변경하면 된다.


eth0으로 바꾸고 싶으면?


$sudo vi /etc/default/grub


GRUB_CMDLINE_LINUX_DEFAULT="" 을

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0" 로 수정해주면 된다.


$sudo update-grub

$sudo reboot

실행파일에 대해 화이트리스트로 보호하는 업무를 진행하다 변환 툴을 찾던 도중 shc라는 툴을 발견하였다.

위의 화면을 보면 알 수 있듯이 일반적인 쉘 스크립트는 ASCII 텍스트로 되어있다. (화면이 깨져보이는 점 죄송합니다..)

이를 밑의 testit.x 처럼 실행할 수 있는, 일반파일(리눅스는 일반파일과 특수파일로 구분됨)로 바꿔주는 툴이라고 할 수 있겠다.


1. 파일 다운로드

해당 사이트에서 받을 수 있다.

1) wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz

2) 클릭하여 직접 다운로드


2. 압축 해제
$tar zxvf <download_file_name>


3. 컴파일 및 설치

$make    //본인의 home은 권한을 root로만 주었기 때문에 sudo 명령을 씀


$sudo make install

y입력


4. Test

$shc -f <script_file_name>

명령어 수행 후 <script_name>.x 파일이 생성됨을 확인할 수 있다.

기존의 스크립트 파일의 모습이다.

변환된 바이너리 파일의 모습이다.


끝.

[원문: http://tools.kali.org/information-gathering/recon-ng]


정의

Recon-ng is a full-featured Web Reconnaissance framework written in Python. Complete with independent modules, database interaction, built in convenience functions, interactive help, and command completion, Recon-ng provides a powerful environment in which open source web-based reconnaissance can be conducted quickly and thoroughly.


Recon-ng has a look and feel similar to the Metasploit Framework, reducing the learning curve for leveraging the framework. However, it is quite different. Recon-ng is not intended to compete with existing frameworks, as it is designed exclusively for web-based open source reconnaissance. If you want to exploit, use the Metasploit Framework. If you want to Social Engineer, us the Social Engineer Toolkit. If you want to conduct reconnaissance, use Recon-ng! See the Usage Guide for more information.


Recon-ng is a completely modular framework and makes it easy for even the newest of Python developers to contribute. Each module is a subclass of the “module” class. The “module” class is a customized “cmd” interpreter equipped with built-in functionality that provides simple interfaces to common tasks such as standardizing output, interacting with the database, making web requests, and managing API keys. Therefore, all the hard work has been done. Building modules is simple and takes little more than a few minutes. See the Development Guide for more information.

 recon-ng를 간략하게 소개하면 파이썬 기반의 웹 정찰 프레임 워크이다. 정찰이라는 말이 조금 우스워 보일 수는 있으나 마치 스타크래프트에서 드론이 적의 진영이 취약한지 아닌지에 대해 정찰 간다. 정도로 표현하면 어느정도 일맥상통하지 않을까..?
recon-ng는 보기에는 metasploit-framework와 비슷해 보인다. 하지만 꽤 다른데 recon-ng는 오로지 웹 기반을 위해 설계되었다. 만약에 exploit을 원한다면 metasploit framework를 이용하면 되고 사회적 공학을 원한다면 Setoolkit을 이용하면 된다.

추후 업데이트가 되겠지만 간단한 정보로는
metaspolit: http://kkn1220.tistory.com/34

setoolkit: http://kkn1220.tistory.com/31 을 참고하면 되겠다.

28번이 SET(Social Engineer Toolkit)이기 때문에 Setoolkit은 좀 더 업데이트 할 예정이다.

recon-ng는 칼리에 build-in 설치 되어 있기 때문에 추가 설치나 다운로드 받을 필요가 없다.


Usage

이러한 프레임워크는 기본적으로 help를 눌러 어떤 기능들을 제공하는지 보는 것이 우선되어야 한다.

아래 load의 경우 모듈을 커스터마이징하거나 새롭게 출시되는 모듈에 대해 다운로드하고 로드할 수 있다.

recon-ng 커맨드 입력 시 위의 화면과 같이 출력된다.

제공하는 모듈이 상당히 많다. 하나하나 보고는 싶지만 그러기엔 docu의 수도 부족하고 시간 제약상...

모듈 중 xssposed를 확인하였는데 이것은 오픈 버그바운티라 불린다. 해당 내용으로는 기한이나 범위 등의 제약 없이 모든 웹사이트에서 발견되는 모든 종류의 취약점들이 있다.

해당 url에는 취약점이 발견되지 않았다.

구글의 경우 65개의 취약점이 발견되었으며 일부는 fixed되었지만 많은 수의 취약점들이 unfixed 상태였다.

target website의 취약점 발견을 하는 데 있어 유용할 것 같다.


제공하는 api가 많다. 페이스북, 구글, jigsaw, 쇼단 등을 제공한다.

api의 경우 무료로 제공하는 것들과 유료로 제공하는 것들이 있을 수 있는데 전에 shodan api를 받아 놓은 것이 있어 추가해보겠다.

쇼단에 대한 내용은 http://kkn1220.tistory.com/68 을 참고하면 된다.

usage: keys add <name>

keys list를 입력하면 아래와 같이 value값이 추가 된 것을 확인할 수 있다.

각각에 대한 모듈 적용 후 show info를 입력하면 해당 모듈에 대한 간단한 설명과 방법에 대해 소개한다.

간단히 테스트 목적이기 때문에 특정 타겟이 아닌 naver로 run시켜보았다.

쭈주죽 나온다.

그냥 끄면 아쉽기 때문에 임의의 ip를 가지고 접속해보았다.

접속 결과 웹사이트가 오래 된 느낌이 들었다. 혹시나 하는 마음에 sql 인젝션을 수행하였다.

실제로 sql인젝션에 대해 이론으로만 배웠는데 되는 것을 보고 신기한 마음도 있었다.

아래는 사이트에 대해 공개는 할 수 없고 관리자 권한으로 접속한 페이지의 화면이다.


recon-ng는 웹사이트 정찰에 있어 제공하는 모듈도 많고 업데이트도 빈번하게 되어 타겟에 대한 정보를 획득하기 좋은 툴이라고 사료된다.

다만 아쉬운 점은 빈번한 업데이트로 인해 모듈 통합이나 없어지는 것들이 많아 document 수가 부족하다는 점?

'해킹 > kali tools' 카테고리의 다른 글

[Information-Gathering26]p0f  (0) 2016.04.07
[Information-Gathering25]nmap  (0) 2016.04.06
[Information-Gathering24]miranda  (0) 2016.03.29
[Information-Gathering23]masscan  (0) 2016.03.24
[Information-Gathering22]hping3  (0) 2016.03.18

[원문: http://tools.kali.org/information-gathering/p0f]


정의

P0f is a tool that utilizes an array of sophisticated, purely passive traffic fingerprinting mechanisms to identify the players behind any incidental TCP/IP communications (often as little as a single normal SYN) without interfering in any way. Version 3 is a complete rewrite of the original codebase, incorporating a significant number of improvements to network-level fingerprinting, and introducing the ability to reason about application-level payloads (e.g., HTTP).

Some of p0f’s capabilities include:

  • Highly scalable and extremely fast identification of the operating system and software on both endpoints of a vanilla TCP connection – especially in settings where NMap probes are blocked, too slow, unreliable, or would simply set off alarms.
  • Measurement of system uptime and network hookup, distance (including topology behind NAT or packet filters), user language preferences, and so on.
  • Automated detection of connection sharing / NAT, load balancing, and application-level proxying setups.
  • Detection of clients and servers that forge declarative statements such as X-Mailer or User-Agent.

The tool can be operated in the foreground or as a daemon, and offers a simple real-time API for third-party components that wish to obtain additional information about the actors they are talking to.


Common uses for p0f include reconnaissance during penetration tests; routine network monitoring; detection of unauthorized network interconnects in corporate environments; providing signals for abuse-prevention tools; and miscellanous forensics.

  p0f를 간략하게 소개하면 운영하는 서비스에 대한 OS를 확인하거나 어플리케이션의 정보를 확인할 수 있다.
예를 들면 서버의 OS가 리눅스 3.x, 또는 80 아파치 2.x 등을 확인할 수 있다.

해킹을 하기 전 footprint 단계에서 타겟 서비스의 정보를 파악해야 할 일이 생기는데 이럴 때 사용하는 것이 p0f 이다.
(footprint에 대한 설명은 http://kkn1220.tistory.com/61 참고)

25번 nmap에서 -O 옵션을 주어 타겟의 OS를 확인해보았다. (http://kkn1220.tistory.com/103 참고)
그렇다면 nmap과 p0f의 차이점은 무엇일까? 라는 질문을 할 수 있다. p0f는 Passive OS Fingerprinting으로 말 그대로 수동적인 OS 탐지 도구이다. nmap과 같은 Active Fingerprinting과는 수동적이냐 능동적이냐의 차이가 있으며 수동적인 OS 탐지도구의 경우 추가 또는 비정상적 트래픽을 생성하지 않는 것이 특징이다. 즉 정상적인 통신을 하면서 타겟 시스템의 OS를 확인할 수 있다.

 p0f는 4가지 동작모드를 지원한다.

-SYN mode: 연결 시도 측 운영체제 정보 확인

-SYN + ACK mode: 응답하는 측 운영체제 정보 확인

-RST/RST+ ACK mode: 연결 시도 거부 시스템 측 정보 확인

-stray ACK mode: 기존 세션 검토


Usage

사용법은 어렵지 않다. 

옵션으로 인터페이스를 설정하거나 promiscuous 모드 설정, 저장하거나 input file 지정 등 사항에 맞게 지정하면 끝이다.


-i 인터페이스 모드로 eth0을 지정하였고 promiscuous를 지정하였다. 이전에 스니핑 포스트 때 언급하였는데 자신의 주소값을 무시하고 모든 패킷을 받아들이는 상태를 promiscuous 모드라고 한다. (스니핑 http://kkn1220.tistory.com/67 참고)

그림출처: 안랩

kali는 기다리게 된다....


보기 편하도록 ubuntu(192.168.100.5)에서 실행이 아닌 kali에서 ssh로 192.168.100.5로 접속을 한 상태이다.

kkn은 ubuntu(192.168.100.5)이고 ssh로 raspberry pi(192.168.100.9)로 연결을 시도하는 화면의 모습이다.

위의 사진을 보면 192.168.100.5의 OS를 확인할 수 있다. 실제로는 3.19인데 완벽하게 맞추지는 못한다.

또한 9번 raspberry의 경우 라즈비안을 설치하였는데 os에 ??? 로 확인할 수가 없었다..


심심해서 ubuntu에서 apt-get update를 하였다. 

위의 사진에는 표현되지 않았지만 해당 서버의 경우 리눅스 2.4, 3.x로 출력이 되었다. 

또한 80포트 apache의 경우 2.x로 출력이 되었음을 확인할 수 있었다.


뭐 간단한 예제이기에 별거 없어보인다. 하지만 실제 타겟에 대해 할 경우 많은 내용이 출력될 수 있다. 그렇기 때문에 패킷 덤프파일을 이용하여 os를 탐지하는 경우가 더 많은 듯 보인다.

'해킹 > kali tools' 카테고리의 다른 글

[Information-Gathering27]recon-ng  (0) 2016.04.12
[Information-Gathering25]nmap  (0) 2016.04.06
[Information-Gathering24]miranda  (0) 2016.03.29
[Information-Gathering23]masscan  (0) 2016.03.24
[Information-Gathering22]hping3  (0) 2016.03.18

[원문: http://tools.kali.org/information-gathering/nmap]


정의

Nmap (“Network Mapper”) is a free and open source (license) utility for network discovery and security auditing. Many systems and network administrators also find it useful for tasks such as network inventory, managing service upgrade schedules, and monitoring host or service uptime. Nmap uses raw IP packets in novel ways to determine what hosts are available on the network, what services (application name and version) those hosts are offering, what operating systems (and OS versions) they are running, what type of packet filters/firewalls are in use, and dozens of other characteristics. It was designed to rapidly scan large networks, but works fine against single hosts. Nmap runs on all major computer operating systems, and official binary packages are available for Linux, Windows, and Mac OS X. In addition to the classic command-line Nmap executable, the Nmap suite includes an advanced GUI and results viewer (Zenmap), a flexible data transfer, redirection, and debugging tool (Ncat), a utility for comparing scan results (Ndiff), and a packet generation and response analysis tool (Nping).


Nmap was named “Security Product of the Year” by Linux Journal, Info World, LinuxQuestions.Org, and Codetalker Digest. It was even featured in twelve movies, including The Matrix Reloaded, Die Hard 4, Girl With the Dragon Tattoo, and The Bourne Ultimatum.

 기존과는 다르게 nmap은 간략하게 소개 할 수가 없다. nmap에는 상당히 많은 기능과 옵션이 존재하기 때문이다.

그래도 굳이 정의하자면 포트스캐닝 도구로서 호스트나 네트워크를 스캐닝 할 때 매우 우용한 도구다. 라고 표현하고 싶다.

위의 정의를 보면 nmap은 네트워크 검사나 보안 감사를 위한 무료이자 오픈소스 유틸리티로 표현하고 있다.

nmap은 raw ip 패킷을 이용하여 네트워크상의 호스트 검사, 사용하는 서비스가 무엇인지, 운영하는 OS, 사용 중인 패킷 필터, 방화벽 타입 등을 검사한다.

 원문 페이지를 방문하면 nmap에 대한 장점을 소개하였는데 간략하게 소개하자면

1) 다양한 포트스캐닝 메커니즘(TCP&UDP), os 감지, 버전 감지, ping sweeps 등을 제공하는 유연성

2) huge network 상에서 제공할 수 있는 강력함

3) 윈도우, 리눅스, 솔라리스, 맥 등에서 사용할 수 있음

4) 자세한 다큐먼트 등을 소개하고 있다.


Usage

위에서 볼 수 있듯이 엄청많다....


#nmap [Scan Type(s)] [Options] {target specification}

기본 syntax는 위와 같다.

자주 사용하는 옵션에 대해 소개하고자 한다. 나머지 옵션 및 기능들은 man page 참고!

(분류는 보기좋게(?) 개인적으로 판단하였습니다.)

[Scan Type(s)]

1)Port Scanning

-sT: TCP connect() scan: TCP scanning의 가장 기초적인 형태로 connect()함수를 사용해서 모든 포트에 대해 스캔

-sS: TCP SYN scan: full TCP접속을 하지 않으므로 "half-open" 스캐닝이라 한다. 하나의 SYN 패킷을 보내어 SYN|ACK 응답이 오면 그 포트는 listening 상태임을 나타내며, RST(ReSeT)응답이 오면 non-listener임을 나타냄

이 기술은 하나의 패킷을 보내어 응답을 받으면 그 즉시 RST 패킷을 보내서 접속을 끊어버리기 때문에 로그를 남기지 않는 경우가 대부분임. 즉 추적이 어렵다.

-sF: Stealth FIN: SYN 패킷을 막아놓은 방화벽이나 패킷 필터 또는 Synlogger와 Courtney 같은 스캔을 탐지하는 프로그램들을 무사히 통과할 수 있다. open 포트로 FIN 패킷을 보내면 이 패킷을 무시하고, closed 포트로 보내면 RST 패킷이 온다.

-sX: Xmas Tree: FIN, URG, PUSH 코드 비트를 설정한 채 패킷을 보냄. RESET은 포트가 닫혔다는 것을 말해주며, 반응이 없는 것은 포트가 열려있음을 뜻함

-sN: Null scan: 어떤 코드 비트도 설정하지 않은 패킷을 보냄. RESET은 포트가 닫힌 것을 말하며, 반응이 없는 것은 포트가 열린 것을 뜻함

-sP: Ping scanning: 네트워크의 어느 호스트가 살아있는지를 알고 싶을 때 사용(-sn 과 동일)

-sU; UDP scan, 시간이 상당히 오래 걸림

-sA: ACK scan 

-sW: window scan 

-sR: RPC scan

2)Service And Version Detection

-sV:Version detection

-sR:RPC scan

3)OS Detection

-O: Enable OS detection

리눅스 3.x를 사용한다고 추측하고 있다. 정확한 버전까지는 확인할 수 없으나 대략적으로 판단할 수 있다.


[Options]

1)Port Specification And Scan Order

-p: port ranges(Only scan specified ports): 특정 포트를 지정하는 것으로 예를 들어 -p 80 식으로 지정함, '-' 범위 지정 가능
(Udp:53, 111, 137, Tcp:21-25, 80, 139, 8080)

-F(fast scan)

-r(Don't randomize ports)

2) Timing and Performance

-T:paranoid|sneaky|polite|normar|aggressive|insane

->The first two are for IDS evasion. Polite mode slows down the scan to use less bandwidth and target machine resources. Normal mode is the default and so -T3 does nothing. Aggressive mode speeds scans up by making the assumption that you are on a reasonably fast and reliable network. Finally insane mode. assumes that you are on an extraordinarily fast network or are willing to sacrifice some accuracy for speed.

주로 4번(-T4)을 많이 사용하는 것 같음

3) Verbosity

nmap을 쓰는 사람은 기본적으로 v옵션을 사용

-v: Increase verbosity level: 자세히

Use it twice or more for even greater verbosity: -vv, or give a verbosity level directly, for example -v3


{target specification}

타겟을 지정하는 데 있어 단일 호스트 192.168.100.5, 다중 호스트 192.168.100.3-20 으로 주어지는게 가능하다.

또한 CIDR-style을 지원한다. 예를 들어 192.168.100.0/24는 192.168.100.0번부터 192.168.100.255까지 256의 호스트를 스캔

-iL inputfilename

작성한 파일이 제대로 동작하는지 tab기능과 enter를 통해 작성 결과 모두 정상적으로 출력되는 것을 확인할 수 있었다.

비록 위의 결과는 3개의 호스트에 대해서만 출력하였지만 같은 IP대역이 아닌 다양하고 상당히 많은 수의 호스트 리스트가 필요할 수 있다. 이 때 유용하게 쓰일 것으로 사료된다.


nmap을 모두 설명하기에는 실력의 부족도 있지만 nmap에 대한 기능만 다룬 두꺼운 책 한권이 있을 정도로 다루는 범위가 방대하다. 해당 포스트는 nmap에 대한 소개 정도로 보면 좋을 듯 싶다. 하지만 기능은 매우 강력하다라는 것을 표현하고 싶다.

'해킹 > kali tools' 카테고리의 다른 글

[Information-Gathering27]recon-ng  (0) 2016.04.12
[Information-Gathering26]p0f  (0) 2016.04.07
[Information-Gathering24]miranda  (0) 2016.03.29
[Information-Gathering23]masscan  (0) 2016.03.24
[Information-Gathering22]hping3  (0) 2016.03.18

[원문: http://tools.kali.org/information-gathering/miranda]


정의

Miranda is a Python-based Universal Plug-N-Play client application designed to discover, query and interact with UPNP devices, particularly Internet Gateway Devices (aka, routers). It can be used to audit UPNP-enabled devices on a network for possible vulnerabilities. Some of its features include:


Interactive shell with tab completion and command history

Passive and active discovery of UPNP devices

Customizable MSEARCH queries (query for specific devices/services)

Full control over application settings such as IP addresses, ports and headers

Simple enumeration of UPNP devices, services, actions and variables

Correlation of input/output state variables with service actions

Ability to send actions to UPNP services/devices

Ability to save data to file for later analysis and collaboration

Command logging

 간략하게 miranda는 Internet Gateway Device(ex.router)같은 UPNP 디바이스를 찾고 상호작용하기 위해 설계 된 파이썬 기반의 Universal PnP 클라이언트 어플리케이션이다. 즉 IGD 타겟에 대해 나열하기 위해 사용 된다고 정의할 수 있다.

Miranda를 실행하기 전에 UPnP에 대한 적절한 지식이 필요하다.

UPnP(https://www.microsoft.com/korea/windowsxp/pro/techinfo/planning/upnp/protocol.mspx 발췌)

UPnP 정의

UPnP는 네트워크 상에 있는 네트워크 장치들이 서로 연동될 수 있도록 하는 범용 표준 프로토콜이다.

UPnP는 표준 IP 프로토콜을 활용함으로 다양한 네트워크 매체를 활용할 수 있는데 즉 장치들을 네트워크로 서로 연결시키는데 활용할 수 있는 모든 매체가 UPnP 기능을 구현할 수 있다.

UPnP가 사용하는 프로토콜

UPnP 프로토콜 스택

    <UPnP 프로토콜 스택>

1)TCP/IP

-TCP/IP 네트워킹 프로토콜 스택은 나머지 모든 UPnP 프로토콜을 구축하는 기반 역할

-TCP/IP 서비스(DHCP, DNS 등) 뿐만 아니라 TCP, UDP, IGMP, ARP , IP 등 TCP/IP 스택에 있는 많은 프로토콜을 사용


2)HTTP, HTTPU, HTTPMU

-HTTP를 기본 프로토콜로하여 유니캐스트, 멀티캐스트를 지원하는 프로토콜

-HTTP는 TCP/IP기반, HTTPU, HTTPMU는 UDP/IP 기반 위에서 동작


3)SSDP

-SDP(Simple Service Discovery Protocol)는 네트워크 서비스를 네트워크 상에서 검색하는 방법을 정의

-SSDP는 HTTPU 및 HTTPMU 기반 위에 구축되며, 제어 포인트가 네트워크 상에서 원하는 리소스를 검색하는 방법 및 장치들이 네트워크상에서 자신들이 가용상태에 있음을 알리는 방법을 정의

-제어 포인트 및 장치 모두가 SSDP를 사용하는데 UPnP 제어 포인트는 부팅이 되자마자 SSDP 검색 요청(HTTPMU을 사용함)을 보내서 네트워크에서 활용 가능한 장치와 서비스를 검색

-UPnP 장치는 멀티캐스트 포트 정보를 수신하고, 검색 요청을 수신하자마자 장치는 일치 여부를 확인하기 위하여 검색 조건을 점검. 만약 일치된 것이 발견되면 유니캐스트 SSDP (HTTPU를 사용) 응답이 제어 포인트로 전송

-이외에도 SSDP는 장치 및 장치 관련 서비스가 네트워크와의 연결을 원활하게 끊는 방법을 포함하고 있으며, 또한 자체적인 문제 해결을 위하여 유해 정보를 정화하는데 사용되는 캐시 타임아웃(cache timeouts)을 포함


4)GENA

-GENA (Generic Event Notification Architecture)는 TCP/IP를 통한 HTTP 및 멀티캐스트 UDP를 사용하여 통보(notifications)를 송수신하는 기능을 제공

-또한 GENA은 이벤트 실행을 위하여 가입자 및 통보 발행자의 개념을 정의

-UPnP는 GENA 포맷을 사용하여 존재 발표 내용을 생성한 후에 SSDP 프로토콜을 통하여 전송하고 UPnP 이벤트 작업의 서비스 상태 변화를 신호로 알려주는 기능 수행


5)SOAP
-SOAP (Simple Object Access Protocol)는 XML 및 HTTP의 용법을 정의하여 원격 프로시저 호출을 실행

-SOAP는 또한 보안용으로 SSL (Secure Sockets Layer)을 활용하고 HTTP의 연결 관리 기능을 활용


6)XML

-XML(Extensible Markup Language)은 웹 상의 구조화된 데이터를 위한 범용 포맷

-XML은 태그와 특성(tags, attributes)을 사용한다는 측면에서 보면 HTML과 유사한 점이 많지만, XML은 그러한 태그와 특성들이 일반적으로 정의된 것이 아니라 사용되는 컨텍스트 내에서 해석된다는 관점에서 보면 상당히 다름

-XML은 장치 및 서비스 설명서, 제어 메시지 및 이벤트에 사용되는 UPnP의 핵심적 부분


(https://www.ethicalhacker.net/columns/heffner/plug-n-play-network-hacking 정리가 참 잘되어 있음)

UPnP 위험성 언급

-UPnP implementations are at more risk than others; several UPnP-enabled IGDs allow the DNS settings to be directly altered via UPnP, which is just begging for a MITM/phishing attack. Still others, particularly those devices that use some form of embedded Linux, actually use the un-sanitized values they receive via UPnP requests as part of executed shell commands, leaving them open to command-injection attacks. A list of some known vulnerable routers can be found here.

UPnP protocol overview

-The UPnP protocol uses a multicast address of 239.255.255.250 and TCP port 1900. 

Devices that offer UPnP services will periodically send out SSDP NOTIFY messages to 239:255:255:250:1900, announcing themselves to any UPnP clients that are listening. 

Likewise, UPnP clients can send SSDP M-SEARCH requests to 239:255:255:250:1900 to see if any UPnP devices respond. Clients can send an M-SEARCH request looking for any UPnP device, or they can specify that they are looking for a particular UPnP device, or they can query only for a device that supports a specific UPnP service. UPnP hosts that match the devices/services requested will respond with a SSDP RESPONSE message, which contains the same information sent in an SSDP NOTIFY message.

-An SSDP NOTIFY message sent by a UPnP host contains a ‘Location’ header which specifies the location of an XML file. This file contains XML data indicating, among other things, the UPnP device type(s) and services supported by the host, 

as well as paths to additional XML documents that describe the various services in detail. In order to discover the full UPnP capabilities of an IGD, you must parse through all the XML files to extract the devices types, services, and actions offered by the IGD.

-UPnP devices support various services that advertise what actions they support. 

A UPnP client can send a UPnP device an action request at any time; this could be a request to open up a port, change the default DNS server, or anything else that the UPnP device supports. 

Input/output data for action requests and responses are sent using SOAP, which uses XML to structure information sent between two parties. 

SOAP requests are essentially HTTP POST requests with some additional SOAP headers included in the HTTP headers.


Usage

usage는 심플하다. 

miranda를 실행하면 upnp 프롬포트의 쉘로 입력할 수 있다. msearch와 pcap으로 명령을 실행할 수 있는데

pcap의 경우 SSDP NOTIFY 메시지를 통한 수동적 실행이고

msearch의 경우 M-SEARCH 메시지를 이용하여 UPnP디바이스에 쿼리를 날린다.

기본적으로 msearch는 모든 UPnP 디바이스를 탐색하지만, 특정 디바이스 타입이나 서비스를 정해서 찾을 수도 있다.

위의 msearch결과는 네트워크상에서 하나의 UPnP가 있다는 것을 확인할 수 있다. 

위의 xml의 경로를 찾아가면 아래와 같이 화면이 출력된다.


위의 host list명령어는 발견된 모든 UPnP 호스트의 리스트를 보여준다.

아래의 host get 0은 위의[0]의 인덱스 번호이며 해당 호스트의 모든 정보를 얻는다.

얻은 정보를 가지고 host info 0 명령어를 실행하면 아래와 같이 해당 호스트에 대한 정보를 수집할 수 있다.

해당 호스트의 요약된 정보를 보고싶으면 host summary 0 명령어를 실행하면 된다.

위의 xml정보와 동일하다. 내용으로는 모든 디바이스 타입과 각각의 디바이스 타입에 관련된 추가 데이터를 확인 할 수 있다.

조금 더 자세한 내용을 확인하고자 한다면 host details 0을 실행하면 된다. 각각 디바이스의 데이터 타입 등이 출력된다.

종종 데이터가 길게 출력될 수 있기 때문에 text로 볼 수 있도록 기능이 제공된다.

save info 0 <file_name>

데이터 저장

summary에서 WANConnectionDevice를 확인했었다.

위에서 보면 알 수 있듯이 AddportMapping과 DeletePortMapping을 확인할 수 있다. 

또한 GetExternalIPAddress 또한 확인할 수 있다.


Let’s try adding a port mapping to open up the administrative interface on port 80 of the IGD (192.168.0.1) by mapping it to port 8080 on the WAN:

add port mapping

upnp> host send 0 WANConnectionDevice WANIPConnection AddPortMapping


Required argument:

     Argument Name:  NewPortMappingDescription

     Data Type:      string

     Allowed Values: []

     Set NewPortMappingDescription value to: All your ports are belong to us


Required argument:

     Argument Name:  NewLeaseDuration

     Data Type:      ui4

     Allowed Values: []

     Set NewLeaseDuration value to: 0


Required argument:

     Argument Name:  NewInternalClient

     Data Type:      string

     Allowed Values: []

     Set NewInternalClient value to: 192.168.0.1


Required argument:

     Argument Name:  NewEnabled

     Data Type:      boolean

     Allowed Values: []

     Set NewEnabled value to: 1


Required argument:

     Argument Name:  NewExternalPort

     Data Type:      ui2

     Allowed Values: []

     Set NewExternalPort value to: 8080


Required argument:

     Argument Name:  NewRemoteHost

     Data Type:      string

     Allowed Values: []

     Set NewRemoteHost value to:


Required argument:

     Argument Name:  NewProtocol

     Data Type:      string

     Allowed Values: [‘TCP’, ‘UDP’]

     Set NewProtocol value to: TCP


Required argument:

     Argument Name:  NewInternalPort

     Data Type:      ui2

     Allowed Values: []

     Set NewInternalPort value to: 80

The AddPortMapping action takes several input values, but there are a few important notes that should be made here:

1) Boolean values are either ‘1’ (true) or ‘0’ (false);

2) The NewProtocol argument only allows for two values, ‘TCP’ or ‘UDP’

3) We did not specify a value for the NewRemoteHost variable, which allows all remote hosts to match this port mapping.


We didn’t get any output from the AddPortMapping action because it has no output variables defined (again, this information is all stored in the data structure if you’re curious). However, we can verify that the action was successful by running the GetSpecificPortMappingEntry action:


get specific port mapping entry

upnp> host send 0 WANConnectionDevice WANIPConnection GetSpecificPortMappingEntry


Required argument:

     Argument Name:  NewExternalPort

     Data Type:      ui2

     Allowed Values: []

      Set NewExternalPort value to: 8080


Required argument:

     Argument Name:  NewRemoteHost

     Data Type:      string

     Allowed Values: []

     Set NewRemoteHost value to:


Required argument:

     Argument Name:  NewProtocol

     Data Type:      string

     Allowed Values: [‘TCP’, ‘UDP’]

     Set NewProtocol value to: TCP


NewPortMappingDescription : All your ports are belong to us

NewLeaseDuration : 0

NewInternalClient : 192.168.0.1

NewEnabled : 1

NewInternalPort : 80


delete port mapping

upnp> host send 0 WANConnectionDevice WANIPConnection DeletePortMapping


Required argument:

     Argument Name:  NewProtocol

     Data Type:      string

     Allowed Values: [‘TCP’, ‘UDP’]

     Set NewProtocol value to: TCP


Required argument:

     Argument Name:  NewExternalPort

     Data Type:      ui2

     Allowed Values: []

     Set NewExternalPort value to: 8080


Required argument:

     Argument Name:  NewRemoteHost

     Data Type:      string

     Allowed Values: []

     Set NewRemoteHost value to:


'해킹 > kali tools' 카테고리의 다른 글

[Information-Gathering26]p0f  (0) 2016.04.07
[Information-Gathering25]nmap  (0) 2016.04.06
[Information-Gathering23]masscan  (0) 2016.03.24
[Information-Gathering22]hping3  (0) 2016.03.18
[Information-Gathering21]goofile  (0) 2016.03.18

[원문: http://tools.kali.org/information-gathering/masscan]


정의

This is the fastest Internet port scanner. It can scan the entire Internet in under 6 minutes, transmitting 10 million packets per second.


It produces results similar to nmap, the most famous port scanner. Internally, it operates more like scanrand, unicornscan, and ZMap, using asynchronous transmission. The major difference is that it’s faster than these other scanners. In addition, it’s more flexible, allowing arbitrary address ranges and port ranges.


NOTE: masscan uses a custom TCP/IP stack. Anything other than simple port scans will cause conflict with the local TCP/IP stack. This means you need to either use the -S option to use a separate IP address, or configure your operating system to firewall the ports that masscan uses.

 간략하게 masscan은 매우 빠른 포트 스캐너이다. massscan은 포트스캐너로 가장 유명한 nmap과 유사한 결과를 보여준다.

고로 nmap을 사용하면 될듯.....


Usage

기본적으로는 #masscan <ip> -p<port number> 를 해주면 된다.

단일 ip의 경우 xxx.xxx.xxx.x 이고 xxx.xxx.xxx.0/24나 xxx.xxx.xxx.1-xxx.xxx.xxx.5 형식도 가능하다.

아래의 경우 포트번호를 1번에서 10000번까지 주었다. 시간이 오래 걸린다. rate속도가 형편이 없다.

--rate <number> 옵션을 주어 속도를 향상시킬 수 있다. 차이가 엄청나다.


exclude text와 include text를 줄 수 있다.

exclude의 경우 제외하다는 의미로 해당 ip를 제외할 수 있다.

#masscan <ip> --excludefile <exclude file_name> -p<port_number>

아래의 경우 5번을 제외시키라는 옵션을 주었고 범위를 0번에서 5번을 주었으나 excludefile 옵션으로 인해 제외되는 것을 확인할 수 있다.

위와는 반대로 포함시키는 옵션이다.

#masscan <ip> --includefile <include file_name> -p<port_number>

ip범위를 0번에서 3번을 주었으나 include option으로 인해 5번도 포함되는 것을 확인할 수 있다.

마지막으로 conf파일에 미리 지정값을 정해주어 사용하는 방법이 있다.

#masscan <ip> -c <conf_file_name>

# Example conf for masscan                                                                                                     

rate =  100000.00                                                                                                              

output-format = grepable                                                                                                       

output-filename = nope                                                                                                         

ports = 80                                                                                                                     

includefile = include.txt                                                                                                      

excludefile = exclude.txt  


'해킹 > kali tools' 카테고리의 다른 글

[Information-Gathering25]nmap  (0) 2016.04.06
[Information-Gathering24]miranda  (0) 2016.03.29
[Information-Gathering22]hping3  (0) 2016.03.18
[Information-Gathering21]goofile  (0) 2016.03.18
[Information-Gathering20]golismero  (0) 2016.03.18

+ Recent posts