오늘은 CoffeeNet 프로젝트를 Github에 올렸다.

나는 블로그 처럼 뚝 하고 올리는 건줄 알았는데, 아니었다.
Git  이라는 Source Code Management 개념이있었다.

프로그램을 만들 때 버전 관리를 위해서, 그리고 다른 사람들과 같이 작업하기 위해
git을 사용한다고 한다.
local git에 저장하고 있다가, remote git에 저장하고 가져오고 한다.
오픈소스라 원격에 저장한 것은 다른 사람들도 쉽게 가져가서 수정하고 할 수 있다.

그 remote git 저장소 중 하나가 github이다. 제일 잘 나가는 저장소 중 하나이다.

github에서 계정을 만들고 새 저장소를 만든다.



(저장소 생성)



생성된 저장소는 아래와 같다.




(생성된 저장소)


이제 remote 저장소와 현재 저장소를 연결해야한다.



(사용자 정보 입력)


사용자 정보를 입력한다.

그리고 remote 저장소와 연결



(remote 저장소와 연결)


이와 같이 하면 연결은 끝난다.

이제 현재 내 VM-kali 호스트와 계정을 연결해 둘 것이다.



(SSH 연결)


ssh 공개키를 내 계정에 저장해 두었다.

기존에 있는 프로젝트와 연결하고 push 하려했더니 자꾸 싱크가 안맞아서 에러가 났다...

그래서 할 수 없이 새로 다른 폴더를 만들고, 거기서 git clone을 해준 뒤, 작업했다.


(add 전)


git clone 한 폴더에 내가 작업했던 파일들을 다 복사했다.

그리고 git status를 치니 아직 추적되지 않은 파일들이 나온다.


(add)


해당 폴더의 모든 파일을 add 해준다.
이렇게 되면 index에 다 들어가게 되고

commit을 해준다.


(commit)


이제 로컬 저장소에 변경 사항들이 저장되었다.

이제 이 정보들을 remote 저장소에 push 해주면 된다.


(push)


이렇게 다 하면 내 CoffeeNet 저장소에 아래와 같이 내가 그 동안

작업했던 내용들이 업로드 된다.



(원격 저장소)


이제 CoffeeNet 프로젝트를 소개할 README.md 를 작성해야한다.



(README.md)


위와 같이 간단히 작성하였다.

방금 작성한 README파일을 내 로컬에도 옮겼다.



(pull)


pull, push를 이용하여 github에 소스코드를 올리고 내려받으면서 관리할 수 있다.

추가적으로 이제 github를 통해 다른 사람들이 나의 코드를 받아갈 수 있다.
그런데 바로 실행이 안될 가능성이 크다.
python3 가 없을 수도있고, 내가 사용한 모듈이 없을 수도 있기 때문이다.

그렇기에 이와 관련되어 필요한 파일들을 설치해주는 setup.sh 쉘스크립트를 작성했다.



(setup.sh)


setup.sh 은
처음 작성해보는 쉘스크립트였는데,
Veil-Framework의 setup.sh를 참고하여 공부하면서 작성하였다.

그리고 파이썬의 필요한 모듈들을 파일로 이름들을 저장해두었다.


(필요한 모듈)


이 파일을 읽어서
하나씩 있는지 검사하고 없으면 설치해주는 쉘스크립트이다.

이로써, github에 업로드 까지 끝났다!!

CoffeeNet 프로젝트의 한 축이 끝났다.
이제 이 버전에 새로운 Tool을 추가하면서, 기존에 있던 코드들을 보수하고 수정하면서 관리할 계획이다.


지난 프로젝트에서의 계획
1. custom 메뉴 기능 구현 (커스텀 옵션 설정기능)
2. Framework의 update 기능 구현
3. 그 외 마무리 작업.

오늘 대망의 이 스캐너 작업이 끝났다.!!!
마지막으로 생각하던 custom 으로 옵션을 설정하는 기능을 추가하였고,
그 외에 마지막으로 스캐너의 기타 기능들을 정리하고 마무리하였다.

custom 옵션같은 경우, 스캐너 클래스에 custom_option이라는 문자열 변수를 놓고 여기에 옵션을 사용자로부터 입력받아 저장하고, 스캔할 때 이 옵션을 뒤에 추가한다.


(추가한 옵션 변수)


여기에 옵션을 사용자로부터 입력받아 저장한다.



(실행 코드)


실행시 이 변수를 옵션 뒤에 붙여서 실행해준다.



(실행 모습)


옵션을 입력받는 모습이다.
여기서 경고문구로 정확히 잘 모르면, 사용하지 말라 라는 경고문을 넣었다.

왜냐하면 부정확한 옵션을 입력으로 넣게 되면 스캔 작업때 에러가 나기 때문이다.


(입력된 옵션)


입력을 받게 되면 스캔 메뉴에서 직접 어떤 옵션이 들어가있는지 확인 할 수 있다.


(실행 모습)


실행시 매우 잘 동작하였다.

아무리 경고를 해놨다 해도, 이에 대해 잘 처리를 안해두면 훌륭한 프로그래머가 아니다.


(에러 모습)


분명 이런 에러가 나올 것이다.

이를 막기 위해 예외 처리를 하였다.



(예외 처리)


예외처리를 하였다. 총 스캔하는 코드가 3부분 있었는데 그 곳에 이렇게 예외처리를 하였다.


(예외처리 모습)


부정확한 옵션으로 인한 에러가 나게 되면

에러를 출력한다. 그리고 현재 입력된 옵션을 지워주게 만들었다.



(옵션 삭제)


옵션이 삭제된 모습이다.

마지막으로 update 기능을 구현하려 했으나,

깃헙에 올려서 배포를 한 후, 깃헙을 이용해 업데이트 작업을 진행할 계획이어서 여기서는 구현하지 않았다.


(update 미 구현)


그래서 이 버전에서는 업데이트 명령이 지원되지 않는다는 문구를 남겨주었다.

이로써 스캐너 작업을 마무리 함으로써
커피넷이라는 프레임워크에서 스캐너가 완성이 되었다.
아직 도구가 하나 밖에 없지만, 커피넷이라는 프레임워크가 완성됬다.

이제 남은 작업은 깃헙 페이지에 올려서 배포하기 위해
README 이런것들을 작성할 예정이다.

오늘 구현한 기능
- custom 메뉴 기능 구현 (커스텀 옵션 설정기능)
- 그 외 마무리 작업 (스캐너 완성)

현재까지 구현한 기능
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의 오픈 포트 출력 기능
8. detail 스캔의 예외모드 기능 구현
9. nmap의 호스트 스캔 성능 고민.
10. nmap의 속도 개선 고민.
11. custom 메뉴 기능 구현 (커스텀 옵션 설정기능)


다음 계획
1. github 페이지 업로드 준비 및 업로드


지난 프로젝트에서의 계획
1. detail 스캔의 예외모드 기능 구현
2. Framework의 update 기능 구현
3. nmap의 호스트 스캔 성능 고민.
4. nmap의 속도 개선 고민.

-> 오늘 구현한 것은 먼저 detail 스캔의 예외모드 기능을 구현해보았다.
그리고 nmap의 스캔이 오락가락했던 것에 대해 고민해보고,
nmap의 속도를 개선시키기 위해 고민해보았다.

그리고 추가적으로 메뉴를 조금씩 바꾸고 있다. 아래는 스캐너 모듈의 스캔 메뉴를 조금 바꾸었다.



(스캔 메뉴)


스캔 메뉴에서 Target IP 라는 것을 Target Network라고 바꾸었다. 타겟 설정이 불필요해 보여서 현재 공격 대상의 네트워크 대역을 표시해 주는 것으로 하기로 했다. 그리고 타겟 설정 메뉴를 없앴다. 단순히 detail 뒤에 인자로 아이피 주소를 주면 해당 대역을 스캔해 주므로, 불필요하다고 생각했다.
그리고 추가적으로 nmap의 옵션을 사용자 입맛에 맞게 옵션을 줄 수 있도록 custom 메뉴를 만들었다.
이 메뉴를 통해서 사용자는 자기 입맛대로 nmap의 옵션을 설정할 수 있다.

그리고 detail 스캔의 예외 모드이다.
예외 모드란 host 스캔 없이 바로 detail 스캔메뉴로 들어온 경우이다.

이럴 경우 기존 host 데이터가 없으므로 detail 스캔을 진행하지 못하므로, ip 주소를 입력받아 해당 ip 주소를 detail 스캔 하는 방식으로 작성하였다.


(detail 스캔 예외모드)


실행하면 다음과 같이 잘 동작하는 것을 확인하였다.


(동작 확인)


그리고 추가적으로,
detail 뒤에 ip 주소를 인자로 던저주면 해당 ip에 대해 detail 스캔을 해주는 기능을 추가했다.

코드에서는 두번째 인자를 ip 형식이 맞는지 체크하는 루틴을 위에서 만든것과 같이 똑같이 만들었다.



(동작 확인)


동작이 잘 되는 것 확인!
위에 두개가 뜬 것은 제일 먼저 192.168.0.1 에 대한 정보가 있는 상태에서
추가적으로 192.168.0.4 를 스캔하여 192.168.0.4의 정보가 추가 된 상태로 보여주기 때문이다.

그 다음 고민한 것이 스캔 속도였다.
호스트 스캔의 경우 여러 대의 호스트여도 빠르게 스캔이 가능하였다.
하지만 detail 스캔의 경우 20대 정도만 되도, 기다리는게 한 세월이었다.

그래서 찾아본 결과 -T 옵션이 아래와 같은 기준으로 세부 옵션을 설정해주는 거였다.


(-T 옵션)


여기서 나는 디테일 스캔에서 -T5 옵션을 사용하기로 결정했다.
-T5 의 경우 빠르긴하지만, 단점이라면 트래픽이 많고 시끄럽다는 것이다.

그런데 카페 같은 소규모 네트워크에서 사용할 프레임워크로써 그러한 소음에는 덜 민감해도 된다고 판단하였고, 카페같은 무선랜을 주로 사용하는 곳에서는 호스트가 유동적으로 연결 되었다 해제된다. 그러기에 빠르게 스캔할 줄 아는게 굉장히 중요하다고 판단하여 -T5 옵션을 사용하기로 결정했다.


(-T 옵션 장착)


그 외로 이제 정상적인 스캐너의 기능을 할 줄 알게 되는 스캐너를 구현하였다.



(스캐너 구현)


마지막으로, 스캐너가 오락가락하는 것에 대해 고민해보았다.
내가 실험했던 곳은 무선랜이 대다수였는데, 안되는 곳의 특징을 살펴보니, 주파수 간섭이 심한 곳이었다. 이런 곳에서는 --scan-delay를 조금 길게 설정해주니, 안잡히던 호스트도 잡히고 하는 현상을 발견했다. --scan-delay는 스캔하고 기다리는 시간을 주는 것인데, 주파수 간섭이 심한 곳 같은 경우에는 패킷이 전송실패할 경우가 많기 때문에 이 시간을 조금 늘려주는 것이 안전하였다.

-> 이런 경우 custom 옵션을 사용하여 추가해주거나, 이러한 경우를 위한 메뉴를 하나 더 설정할 생각이다.

오늘 구현한 기능
- detail 스캔의 예외모드 기능 구현
- nmap의 호스트 스캔 성능 고민.
nmap의 속도 개선 고민.

현재까지 구현한 기능
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의 오픈 포트 출력 기능
8. detail 스캔의 예외모드 기능 구현
9. nmap의 호스트 스캔 성능 고민.
10. nmap의 속도 개선 고민.

다음 계획
1. custom 메뉴 기능 구현 (커스텀 옵션 설정기능)
2. Framework의 update 기능 구현
3. 그 외 마무리 작업.

+ Recent posts