지난 프로젝트에서의 계획
1. 오픈포트 정보, 서비스를 확인할 수 있는 기능 추가
2. detail 스캔의 예외모드 기능 구현
3. Framework의 update 기능 구현

이 중오늘 구현한 것은 detail 스캔의 오픈된 서비스 정보를 출력하는 것을 구현하였다.
이를 위해 어떠한 인터페이스가 좋을지 고민을 해보았는데,
db 라는 메뉴를 하나 더 만들어서

db 메뉴에서 지금까지 스캔한 정보에 대한 정보를 선택해서 볼 수 있는 메뉴를 만드는게 좋을 것 같았다.



(추가한 db메뉴)


db 메뉴에 들어가면 아래와 같다.


(db 메뉴)


db 메뉴에 들어가면 현재 스캔된 호스트 정보의 개수를 알려준다. 현재 7개가 들어있다.

- host 메뉴에서는 호스트 리스트를 출력해준다.
- service 메뉴에서는 오픈된 포트를 출력해준다.
- back 메뉴는 Scanner 메뉴로 돌아간다.
- help 메뉴는 db 메뉴에 관한 help를 만들었다. 이유는 db에서 사용하는 명령어에 대해 알려주는 게 있어야할 거 같아서 메뉴만 만들어두었다.

host 리스트 정보 출력



(호스트 리스트)


여기서 service [ip] 이렇게 입력하면

입력된 ip에 열려있는 포트 정보를 출력해준다.



(open 된 port 정보)


예외적으로 호스트된 정보가 없다면 데이터가 없다고 출력해준다.



(호스트 정보 없음)


service 메뉴에 관한 코드는 아래와 같다.



(service 메뉴)


현재 1개의 IP 정보가 추가적으로 들어와서 그 IP정보에 대한 오픈 포트의 정보를 출력하게 만들었다.
아무것도 없이 service만 입력을 하면 호스트 전체의 service를 출력하도록 하는 코드로 만들 것이다.

오늘 이어서 만들다 보니 또 문제점을 발견하였다.
-> nmap이 오락가락? 한다.
호스트가 잡힐 때가 있고 안잡힐 때가 있다. 기본적으로 가장 중요한 Gateway도 잡혔다 안잡혔다 한다...
이유는 잘 모르겠다. 어떤 때는 Gateway까지 전부 완벽하게 스캔되고,
어쩔 때는 잘 안된다.

wireshark로 분석을 해본 결과 nmap은 ip대역을 넣어주면, 처음 arp 스캔을 한다.
그리고 arp 스캔 결과를 가지고 추가적인 작업을 하는 것을 확인했다.
분명 gateway가 arp 응답을 했음에도 불구하고, host-down이라고 뜰 때가 있었다.

ping gateway는 너무너무 잘나간다.
그리고 바로 이어서 핑스캔으로 현재 로컬 ip대역으로 설정한 후 실행하면 게이트웨이가 안잡힐 때가 있다.
(?!)
정리하면
nmap -sP -sn 172.30.1.0/24   ->  gateway 안잡힘.
nmap -sP -sn 172.30.1.254    -> 254가 게이트웨이인데, 이렇게 하면 잡힘.

하아.. 성능을 높이기 위해
ping 스캔을 직접 구현해야하나 고민 중이다.
추가적으로 detail 스캔할 때 느리다는 단점이 있었다.
물론, 카페같은 소규모 네트워크를 위한 프레임 워크이지만, 호스트 대수가 20대가 넘어가면
세월아 내월아 함흥차사다.
적어도 50대까지는 나름 그래도 잘 커버할 수 있게 만들어야 될거 같다.
지금 생각으로는 thread를 이용하여 스캔방식을 달리할 생각이다.
nmap 자체에서 thread를 이용하는거 같았는데, 이 또한 자세히 조사해서 알아봐야할 듯 싶다.

오늘 구현한 것에 비해 해야할 일들이 더 늘은 느낌이다...!
(아! detail scan을 출력하는 기능은 다른 곳에다 엮을 생각이다.)

오늘 구현한 기능
- scanner의 오픈 포트 출력기능
- db 메뉴를 새로 만듬.

현재까지 구현한 기능
1. Framework 내 tool import 등록, 연동
2. 각 Framework의 기능 구현(list, use, info, exit)
3. scanner의 인터페이스 설정 부분, 설정된 인터페이스의 IP정보 구하기.
4. scanner의 host scan 기능
5. scanner의 detail scan default기능
6. detail 결과 전체 출력기능(ip, mac, vendor ,os)
7. db 메뉴 생성 및 scanner의 오픈 포트 출력 기능

다음 계획
1. detail 스캔의 예외모드 기능 구현
2. Framework의 update 기능 구현
3. nmap의 호스트 스캔 성능 고민.

4. nmap의 속도 개선 고민.


Rootkit의 원리를 이해하기위해
간단한 Rootkit을 만들었다.

특수 코드인 1018을 입력으로 넣으면 root 권한을 넘겨주는 rootkit을 만들것이다.


(Prototype)


모듈은 디바이스로 관리가 된다. 디바이스는 리눅스에서 파일처럼 다뤄진다.
디바이스와 입출력을 하기위해 open, read, write 함수를 정의해준다.
open과 read는 여기서 사용하지 않을 것이므로 모양만 만들어준다.

여기서 write함수를 채워준다.


(write 함수)


write함수를 보면 유저 영역의 입력을 받는다.
입력을 받아서 첫 4자리를 비교한다. 첫 4자리가 1018이라면
root권한인 id를 0으로 만들어준다.

Makefile을 만든다.


(Makefile)


그 후 insmod로 만든 모듈을 로딩한다.

로딩한 후, chmod를 이용하여 /dev 아래에 있는 해당 디바이스를 666으로 만들어준다.

그 이유는 루트 권한이 아닌 일반계정에서 실행할 수 있도록 하기 위해서이다.


(권한 설정)


실행하기 전 권한을 확인한 모습이다.


(권한)


일반 사용자 계정이다.

그 후 /dev 아래에 만들어진 normaltic_door 가 있다.

이 디바이스에 1018이라고 입력을 넣는다.


(매직값 입력)


그렇게 되면,

위에서 작성한 write에 의해서 사용자 권한을 0으로 만들어준다.


(root 권한 획득)


root 권한을 획득했다.

간단한 rootkit을 만들어보면서
rootkit의 원리를 이해할 수 있었다.

유저 영역이 아닌, 커널 영역에서 root권한으로 권한상승시킨다는 개념이 이렇게
커널 영역에서 이루어지는 것을 확인할 수 있었다.

* 참조

https://0x00sec.org/t/kernel-rootkits-getting-your-hands-dirty/1485

지난 프로젝트 일지에서의 계획
1. 호스트 리스트를 가지고 디테일 스캐닝 기능 구현
2. Framework의 update 기능 구현

이번에 구현한 것은 디테일 스캐닝의 기능을 구현했다.



(detail 명령)


추가한 코드 시작부분이다.


(코드)


detail 명령시 기존에 있던 hosts 리스트에 있던 ip들을 대상으로 detail하게 scan을 한다.
원래 순서는
host scan을 한 후 detail scan을 한다고 가정을 했기 때문에 default로는 host scan의 결과가 target ip가 된다.
그러나 host scan이 없어서 hosts리스트가 없다면 특정 IP를 입력 받을 수 있도록 만들었다.
이 때 정규식 표현을 통해 IP 형식인지를 체크한다.
* 아직 detail 스캔의 예외모드는 구현하지 않았다.

default 방식인 host 스캔을 했다는 가정을 한 디테일 스캔을 완성하였다.


(스캔 옵션)


디테일 스캔 옵션으로는 스텔스하게, 운영체제 탐색, 서비스버젼 탐색을 넣었다.
그리고 기존 hosts 사전에서 담겨있던 mac, vendor 정보를 저장해둔다.
마지막에 사전으로 다시 저장할 것이다.

운영체제, 오픈 포트 및 서비스를 분석하여 사전으로 저장한다.


(스캔 정보 저장)


이렇게 저장된 스캔 결과를 확인'해보았다.


(호스트에 저장된 정보)


이제 이 정보들을가지고 화면에 출력해주면 된다.

이번에 구현한 기능은 detailscan의 결과를 출력하는 함수를 만들었다.


(detailscan 출력)


아이피, 맥, 벤더, 운영체제  이렇게 4가지의 정보를 나열해서 보여주게 만들었다.


(구현 결과)


Detail Scan 기능을 구현하였다.

오픈 포트정보와 함께 서비스도 알아내었는데, 그 정보를 아직 출력하는 기능은 넣지 않았다.
추가적으로 다음에 오픈포트 정보도 확인할 수 있는 기능을 추가할 것이며, detail 스캔의 예외 모드를 구현할 것이다.

오늘 구현한 기능
- scanner의 detail scan default기능
- detail 결과 전체 출력기능(ip, mac, vendor ,os)

현재까지 구현한 기능
1. Framework 내 tool import 등록, 연동
2. 각 Framework의 기능 구현(list, use, info, exit)
3. scanner의 인터페이스 설정 부분, 설정된 인터페이스의 IP정보 구하기.
4. scanner의 host scan 기능
5. scanner의 detail scan default기능
6. detail 결과 전체 출력기능(ip, mac, vendor ,os)

다음 계획
1. 오픈포트 정보, 서비스를 확인할 수 있는 기능 추가
2. detail 스캔의 예외모드 기능 구현

3. Framework의 update 기능 구현

+ Recent posts