( 이 포스트의 해킹은 실제 사용시 불법이고, 절대 사용해서는 안됩니다.)
오늘은 어제에 이어서 SET 툴을 이용해
Spear Phishing Attack Vectors를 해보겠다.
사회공학적 해킹 방법으로
파일에 위장 파일을 감추어 전송하는 것이다.
(트로이목마)

setoolkit을 실행한다.



(setoolkit 실행)



1 번. Social-Engineering Attacks 을 선택한다.



(1번 선택)



그 후 우리가 사용할 Spear-Phishing Attack Vectors를 선택한다.




(1번 선택)



그 후 1번을 선택한다.
여기서 2번 3번 설정을 다 할 수 있다.




(1번 선택)




그 다음에 사용할 수 있는 리스트가 나온다. 우리가 사용할 파일을 선택하는 것이다.
그 파일에 위장시켜서 메일 보내는 것이다.
우리는 pdf 파일을 이용해서 보낼 것이다.
13번 선택한다!



(13번 선택)



그 다음으로는
pdf 파일을 선택하는 건데 기존에 있던 pdf 파일에 첨부할 것인지
아니면 빈 pdf 파일을 이용할 것인지 선택하는 것이다.
우리는 연습이므로
2번 빈 pdf 파일을 선택한다.




(2번 선택)



그 후 연결 방법을 선택하는 것인데
2번을 선택할 것이다.
Reverse_TCP란 피해자 컴퓨터에서 나에게 통신 요청을 하게 하는 것이다.
우리가, 공격자가 통신 요청을 하면 방화벽에서 막힐 수 있기 때문에
피해자가 통신요청을 하게 하는 것이다.
2번 선택



(2번 선택)



그 다음으로 우리에게 통신요청을 하게 할 것이므로
공격자의 IP 주소와 포트번호를 적어준다.



(IP와 포트번호 입력)



그렇게 되면
pdf 파일에 exe실행파일을 심는 작업이 이루어진다.
다 이루어진 후에
메일을 전송할 것인지 물어본다.



(yes 입력)



당연히 yes 넘어간다.

그리고 파일의 이름을 그대로 둘것인지
아니면 파일의 이름을 수정할 것인지 선택하는게 나온다.
2번을 선택해서 pdf 파일의 이름을 지정해준다.



(pdf 파일 이름 지정)



그 후 나머지는 비슷하다.



(2번 선택)





(파일 보내기)




메일 제목, 송신자 메일 주소, 이름 등등을 설정해주고
메일을 전송한다.
그러면 아래와 같은 화면으로 대기상태로 들어가게 된다.




(대기상태)



이제 부터 피해자가 pdf 파일을 열 때 까지 기다리면 된다.

피해자의 입장이다.




(메일 수신)



스팸의심으로 메일이 왔다.
아마 pdf 파일에 exe 파일이 심어져 있어서 스팸으로 간주되지 않았을까 생각이 든다.

어쨋든!
파일을 받아서 실행시켜보았다.



(파일 열기)




피해자의 화면에서는 아무 이상이 없다. 별다른 뭐가 없어보인다.

하 지 만!

공격자의 화면을 보겠다 이제




(연결이 된 모습)



?!?!?
공격자의 화면을 보니 연결이 된 모습이 보인다.
피해자가 연결요청을 한것이다.

sessions -l 을 이요해서
연결 할 수 있는 리스트를 확인한다.



(연결 가능 리스트)



1개가 있다 물론 방금 피해자가 열어본 호스트이다.

sessions -i 1 을 이용해 1번과 연결한다.



(연결)




(연결된 모습)



위는 연결된 모습이다.

연결된 모습에서 help 를 입력하면 할 수 있는 다양한 기능들이 나온다.

대표적인 스크린샷을 해보았다.
명령어로 screenshot을 입력한다.



(스크린샷 입력)




아래 파일이 저장된다고 나온다.
이제 이 스크린샷을 확인해보겠다.

리눅스의 이미지 뷰어를 사용한다.




(이미지 뷰어)




(스크린샷 파일)




저장이 된 경로를 따라 들어가보니
스크린샷 파일이 하나 들어있는 것을 확인할 수 있다.




(스크린샷 확인)



스크린샷을 확인해보니
피해자 컴퓨터의 화면이 그대로 나와있는 것을 확인할 수 있다.!!

다른 명령어로 파일이 뭐가있는지
컴퓨터 시스템의 정보등을 확인 할 수 있다.



(파일 내용)





(시스템 정보)




이처럼 트로이목마와 같이
메일을 이용한 공격 기법
사회공학적인 해킹 기법을 구현해 보았다.




(모든 해킹은 실제 사용시 불법이므로 실제 사용은 절대 안됩니다.
 모든 책임은 행한자에게 존재합니다.)

오늘은 SET을 이용해 볼것이다.

SET 이란?
Socail Engineering Toolkit : 사회공학적 해킹을 할 수 있는 도구들의 모음이다.

칼리리눅스에는 SET이 내장되어있다. 화면 왼쪽 위에 Applications 목록에 8번 항목 Exploitation Tools 목록에 SET이 들어있다.



(SET 위치)



우리는 SET을 최신 버젼으로 이용하기 위해서
SET을 지우고 다시 설치할 것이다.




(기존 SET 삭제)




(SET 다시 설치)




(설치 완료 모습)




우리는 SET 모듈에서 스팸메일을 보내볼 것이다.
정확히 말하면 Mass Mailer Attack은 웜을 이용한 공격이지만
SET Mass Mailer Attack 에서는 웜을 만드는 기능이 없다.
하지만 발신자 메일 주소를 가짜로 보내거나 다수의 수진자에게 메일을 전송하는 공격은 가능하다.

setoolkit을 실행시켜준다.



(setoolkit 실행)




(경고창)




경고창이 무시무시하게 뜬다. 법적 책임은 각자 본인에게 있습니다.
책임을 질거면 y를 선택하면 된다.




(첫 메뉴 화면)




첫 메뉴 화면이다.
여기서 다양한 툴들이 존재하는데
우리는 1번 항목인 Social -Engineering Attacks을 할것이다.

공격에 앞서!
설정해주어야할 것이 하나 있다.
터미널을 하나 열어서 setoolkit의 set.config 파일을 수정해주어야한다.




(setoolkit/set.config 파일 열기)




(수정)




위 빨간색 표시처럼 sendmail을 on으로 열어두는 것이다.
우리가 메일을 직접 보낼 것이기 때문에 ON으로 바꾸어주야한다.

다시 돌아와서
1을 입력해준다. (Social-Engineering Attacks)




(1번 선택)




그 후 5번을 선택한다.
Mass Mailer Attack



(5번 선택)




그 다음으로 메일 보내기를 시작할 것인지 묻는 화면인데
y를 누르면 된다.



(Yes 선택)




1 번 은 Single 하나의 메일 주소에 메일을 보내는 것이고
2 번은 여러개의 메일에 보내는 것이다.

먼저 1번부터 해보자. :)
1번 선택



(1번 선택)




선택후 gamil을 사용할 것인지 아니면 현재 설치된 메일 서버로 보낼 것인지 선택하게 되어있다.
이 공격을 하기전에 메일 서버를 설치해 두었으므로 (메일 서버 구축은 따로 포스팅 하겠다.)
메일 서버를 이용해 보낼 것이다. 2번 선택
그리고 가짜 메일 주소
그리고 가짜 보내는 사람 이름
우선순위 높은 것으로 하겠느냐. yes
파일 첨부 : no
평문으로 보내는 것 : p
그리고 제목하고 내용을 쓰면 메일이 전송된다.




(메일 발송)



확인해보니 naver.com로 보냈는데 메일이 필터링 되서 수신되지 않았다...!

그래서 nate로 바꾸어서 다시 전송해보았다.







(메일 수신 화면)



(메일 내용)



메일이 아주아주 잘 왔다.
:)

그렇다면 이번에는
한번에 여러 계정으로 메일을 보내보겠다. (이게 읽기 제일 싫은 스팸메일..)

먼저 maillist 텍스트 파일을 만들어서 보낼 메일 주소를 다 적는다.
나는 naver, nate, gmail을 선택해서 보냈다.



(maillist)




위와 같은 과정이고
다만 Single , Mass 선택에서
2번 Mass를 선택하면 된다.



(2번 선택)



그리고 보낼 메일주소들이 적힌 파일들의 주소를 적어준다.
/root/maillist.txt 로 적어주었다.
그리고 나머지 과정은 위와 전부 같다.




(메일 전송)





(전송된 모습)




전송된 모습이다.
이제 직접 확인해 보겠다.
역시 naver는 필터링으로 걸러져 오지 않았다.
다만 nate와 gmail은 바로 잘 온것을 확인할 수 있다.





(메일이 전달된 모습)




(메일이 전달된 모습)





여기 까지 SET을 이용해 Mass Mailer Attack을 구현해보았다.
여기서 phishing URI를 활용하면 진짜 Mass Mailer Attack을 구현할 수 있는데
직접 실험해 보겠다. 또 다음에는 SET을 이용해 다른 공격을 해보겠다.


 

 

 

어제에 이어서  DNS서버 구축을 마무리 해보겠다.

도메인 설정

 설정 도메인 : 100.A.localdomain.com  (내가 해야할 DNS  서버 이름)

 

 

(vi 편집기를 이용해 복사한 zone 파일을 연다.)

 

 

복사된 샘플 zone 파일이다.

 

(복사된 샘플 zone 파일)

 

 

레코드(항목)
  - SOA ( Start Of Authority ) 도메인에대한 권한을 가지고 있는 것
  - NS ( Name Server ) : Name 서버에 대한 주소
  - A  (Address) : 주소.

 - IN   ( Internet 클래스 )
 TTL : 조회해간 IP주소를 얼마동안 참조할 것인가. 1D 는 하루동안 참조한다는 뜻이다.
 @ : 대체문자  나의 경우 100.A.localdomain.com 파일이름을 대신 적어주는 것이다.
      도메인 이름으로 주소를 적는다면 100.A.localdomain.com.  이렇게 마지막에 점을 찍어줘야한다.
      도메인 이름이 끝난다는 표시이다. 반드시 찍어줘야한다.
 
 serial : 도메인 네임에 대한 식별자. 보통은 날짜를 적어주는 것이 일반적이다. 
 refresh : TTL과 같다.
 expire : 파기시간
 minumum : 최소시간

 

 

 

(설정)

 

 

나는 이렇게 설정하였다.
DNS 서버 이름은 100.A.localdomain.com 이고
내가 가지고 있을 win 호스트의 주소를 적어주었다.

 

 

(파일 권한 보기)

 

 

DNS  서버를 실행시키기 전에 파일 권한을 확인해보았다.

읽기 권한이 없으면 zone파일에서 읽어서 주소를 알려줘야하는데
못알려주기 때문이다.
위 화면처럼 확인해보니 root 권한만 존재했다.

파일의 권한 설정을 해주었다.

 

 

(파일 권한 설정)

 

 

권한부여까지 끝났으면
DNS 서버를 실행시켜준다.

 

 

 

(DNS 서버 실행)

 

 

 

실행 화면을 확인해보겠다.

현재. 내 DNS 주소와 win 호스트 하나의 주소밖에 입력되지 않았다.

 

 

 

(nslookup 으로 확인해보는 화면)

 

 

 

확인해본결과 도메인 네임에 대한 주소를 잘 알려주고 있다.

 

 

(호스트 추가한 모습)

 

 

 

나 이외에 다른 호스트들도 추가한 모습이다.

 

 

 

(다른 도메인 네임의 영역까지 주소가 잘 전달되는 모습)

 

 

 

나는 A 도메인 안의 100이라는 DNS 서버를 만들었고
전체적으로 localdomain이라는 DNS 서버로 묶여져있었다.

마지막까지 잘 동작하는 것을 확인한 모습이다.


오늘은 로그인 페이지에서 발견되었던 결함을 수정하였다.
그리고 회원가입을 할 수 있게 하였다.

로그인 페이지의 결함을 수정한 방법은
아이디 배열과 비밀번호 배열을 따로 만들기로 했다.

DB 텍스트 파일을 두개 만들까 생각했다가
그건 너무 번잡스럽고 DB 파일 하나로 관리하기 위해서 DB 파일은 하나로 그대로 하고
DB 파일에서 아이디와 비밀번호를 따로 받아서 배열을 두개로 만들기로 했다.

먼저 DbRead 클래스에서 메소드를 추가하였다.
id 배열을 return 하는 메소드와 password 배열을 return 하는 메소드 두개를 추가하였다.



(추가한 메소드)



그리고 아이디, 비밀번호 체크하는 페이지에서 db_id , db_passwd 배열 두개를 만들어주었다.



(체크 페이지 화면)




이렇게 되면 아이디배열에서 아이디를 검색하고
비밀번호 배열에서 비밀번호를 검색하기 때문에 속도가 더 빨라진다.

지금은 DB 자료가 많지 않기 때문이지만 DB 파일 하나로 유지하기 때문에
많은 정보가 있다면 검색하는데 제약이 있다.

아래는 수정하고 실행한 화면이다.




(로그인 화면에서 비밀번호를 입력)





(에러화면)



아이디 배열에 없는 id 이므로 오류 화면을 띄어준다.

비밀번호 찾는 페이지에서도 똑같이 수정해주었다.




(아이디에 비밀번호 입력)


(정상 화면)



결함으로 발견됬던 에러페이지가 뜨지 않게 되었다.

이로써 저번에 발견됬던 결함은 수정 되었다.

조금 더 그럴싸하게 아이디와 비밀번호가 틀리면 경고창으로 아이디와 비밀번호가
틀렸다고 알려주고 다시 화면으로 돌아오게 했다.




(수정한 화면)




경고창을 띄우고 다시 로그인 페이지로 돌아가는
코드를 추가해주었다.

아래는 실행화면이다.


(틀린 아이디 입력)




(경고창)




이제 회원가입 페이지를 만들어 볼 차례이다.

새로 수정된 DB로 원래 DB를 수정해주어야하므로
DbWrite 클래스를 만들어서 이 기능을 구현하도록 만들었다.




(클래스 추가)






(DB 수정하는 메소드)




이 메소드는 아이디와 비밀번호가 추가된 새로운 DB와 파일이름을 인자로 받는다.
그 후 파일이름에 접근해서 새로운 DB로 작성하는 코드다.

이제 회원가입 페이지를 만들것이다.
회원 가입 페이지에
이름, 개인정보도 추가해주어야하지만
이 정보들을 DB에 추가하기에 아직은 초라한 텍스트파일 DB이기 때문에
아이디와 비밀번호만 먼저 추가해 볼것이다.
(차차 업그레이드하는 것으로!)



(회원가입 페이지 코드)




회원 가입 페이지를 확인해본다.



(회원가입 페이지)




잘 나온다.!
이제 입력한 값을 회원가입 버튼을 누르면
넘어가는 페이지에서
새로운 DB로 수정하는 일을 해줘야한다.



(데이터 입력 페이지)




데이터를 입력해 아까 만들어준 클래스메소드를 이용해서 DB를 수정해주었다.

또 이미 있는 아이디에대해서 체크를해서 있으면 존재하는 아이디라고
출력해주었다. (나중에는 아이디 옆에 아이디 중복확인 이라는 기능으로 만들어줄 것이다.)

회원가입이 완료되면 회원가입이 완료 되었다고 알려주면서
로그인 페이지로 넘어가는 것으로 동작을 마무리한다.

한번 테스트해보겠다.



(수정 전 DB)




회원가입을 해보겠다.
아이디 apple, 비밀번호 1234 로 입력하고 회원가입을 클릭해본다.



(회원가입)


(회원가입 성공 모습)







(수정된 DB)





DB 텍스트 파일을 보면 apple 과 그에 따른 1234 비밀번호가 추가된 것을 볼 수 있다.

그렇다면 로그인도 될까?




(회원가입한 아이디로 로그인)








(로그인 성공 모습)





만약 존재하는 아이디로 회원가입을 하려고 한다면?





(이미 존재하는 아이디)





(알림 메세지)





이미 존재한다고 알려주면서 다시 회원가입페이지를 보여주면서 동작을 마무리한다.

다음에 더 추가해 줄 기능은
회원가입할 때 아이디 중복을 확인 버튼을 만들어서 체크해줄것이다.
로그인 한 후, 회원정보 변경 버튼을 만들어서 비밀번호를 바꿀 수 있는 기능을 추가해 줄것이다.


오늘은 정확히 말하면

공격, 모의해킹은 아니다.
하지만 모의해킹의 칼럼에 글을 올리는 이유는
DNS 서버 구축을 이용해 다른 공격을 할 수 있기 때문이다.

그래서 오늘은 DNS 서버를 구축하는 과정을 공부했다.

bind라는 프로그램을 사용할 것이다.
먼저 설치 과정이다.



(bind9 설치 명렁어)



설치가 끝나면
구성 파일부터 볼것이다.
명령어 : cd /etc/bind

ls 를 입력해서 목록을 확인해보면
db.local 파일이 보인다. 바로 여기에 zone 파일의 샘플이 들어있다.




(파일 목록)



우리는 zone 파일을 작성해야한다.
zone 파일은 도메인 네임과 IP를 매핑한 정보가 들어있는 파일이다.
DNS 서버 동작 과정에서 zone 파일을 읽어서 도메인 주소를 IP 주소로 바꾸어주는 것이다.

샘블인 db.local을 복사해서 쓸것이다.



(복사 화면)


명령어 cp db/local db.zone

파일은 db.zone으로 복사되는 것이다.



(vi 편집기로 연다)



vi 편집기로 복사한 파일을 열어준다.

여기에 이제 우리가 원하는
도메인 네임과 IP주소를 매핑시켜서 작성해주면 된다.



(작성한 모습)



이제 이 작성한 파일의 경로를 conf 파일에 설정해줘야한다.

named.conf.local 파일을 수정할 것이다.



(vi 편집기로 연다.)




아래와 같이 수정해준다.



(수정 화면)




자 이제 여기까지 DNS 서버 설정은 끝났다.

DNS 서버를 재시작 시켜준다.
명령어 : service bind9 restart




(재시작)



이제 우리가 설정한 DNS 서버로 DNS 서버 지정을 해줄 것이다.
DNS 서버 설정은
/etc/resolv.conf 파일에 있다.
vi 편집기를 이용해 수정할 것이다.



(DNS 설정 파일)




우리가 만든 DNS 서버 주소와 이 DNS 서버에 없는 정보를 얻기 위해
168.126.63.1 주소도 추가해주었다. (이 주소는 한국 DNS 서버 주소다.)



(DNS 서버 설정화면)



ping 으로 humanist.hum.kr 을 입력해보았더니
IP주소
192.168.1.100 으로 잘 매핑되어 ping이 나간다.



(잘 매핑된 IP주소)



이제 컴퓨터를 바꾸어서 다른 리눅스를 틀어서 확인해 보겠다.

마찬가지로 /etc/resolv.conf 파일에 우리가 만든 DNS 서버를 등록시켜주었다.



(DNS 서버 등록)



dnsmap 을 이용해 humanist.hum.kr  이 IP주소로 잘 매핑되는 검색했다.



(dnsmap)





(결과화면)




결과 화면을 보면
우리가 설정했던 (작성했던) 대로 IP주소가 나오는 것을 확인 할 수 있다.

이렇게 DNS 서버 구축을 해보았다.
(잘 동작하는)



'Linux' 카테고리의 다른 글

Linux(Kali) - iptables 방화벽 구축  (0) 2017.01.17

오늘은 DNS에 관해 알아볼 것이다.

* DNS ( Domain Name System )
 - 문자 주소 사용을 가능하게 해주는 서비스이다.
 Domain Name (문자주소)란?
 ex) www.naver.com 이런 형태의 주소이다.

이 주소로는 통신을 할 수 없다. 실제로 통신하는 것은 IP주소로 통신하기 때문이다.
우리가 편하게 쓰려면 우리가 알아보기 쉬운 문자주소를 IP주소로 바꾸어주는
서비스가 필요하다. 바로 이 서비스가 DNS 이다.


도메인이란 영역을 묵어주는 것이다.

국가 Domain ( .kr  ,  .jp   ,   .de   ,   .be  ...  )
국제 Domain  (  .com   ,   .net   ,   .org   ,  ... ) -> 나라와 상관없이
교육 Domain ( .edu ... )
미국 Domain  ( .gov  )

Root DNS  -> 최상위 DNS 서버 총 세계에 약 7~8대 정도 모든 도메인을 관리한다.

Domain 이름에 대한 정보를 가지고 있는 서버 DNS 서버

- 트리구조의 계층 구조다.

DNS 역할
-> 이름 주소를 주면 IP 주소를 알려준다.
ex) www.naver.com 주소를 물어볼때의 동작
1. Root DNS 에 먼저 물어본다.  ( .com ) 의 DNS서버 주소를 물어본다.
2. .com  DNS에 .naver 의 DNS 서버 주소를 물어본다.
3. .naver DNS에 www의 주소를 물어본다.
-> 역질의구조  (위에서부터 물어보면서 내려온다.)
(지금은 이렇게 동작하지 않는다.)
-> 이렇게 하면 시간이 너무 오래걸린다.


그렇기 때문에!
DNS 캐시 서버를 둔다.

* DNS cache Server
(우리는 이 캐시서버를 사용하고 있는 것이다.)
클라이언트는 제일 먼저 캐시서버에게 Domain Name 주소를 물어본다.
캐싱 : 적어둔다. 적어둔 내용을 일정 시간동안 보관한다.
다른사람이 같은 주소를 물어보면 보관된 내용을 돌려준다.
역질의는 캐시서버가 따로한다.
우리는 캐시서버와만 통신을 해서 주소를 받아온다.
ex) DNS 캐시서버
163.126.63.1
8.8.8.8


이제 우리가 직접 DNS 서버를 구축해볼 것이다.

리눅스에서 DNS 서버를 구축하기위해
bind를 설치해서 이용할 것이다.


(설치 완료모습)



bind를 설치하였다.

먼저 DNS 캐시서버를 만들어보겠다.

이 과정은 간단하다.
설정만하고 실행시켜주면 되기 때문이다.

설정해야하는 파일은
/etc/named.conf 파일이다.
vi 편집기를 이용해 /etc/named.conf파일을 열어준다.




(/etc/named.conf 수정)




(/etc/named.conf 수정)



빨간색 표시 부분을 any로 고친다. 저 부분은 모든 호스트들에게 DNS를 해주겠다는 것이다.
접근 리스트이다.

그리고 DNS서버를 실행시켜준다.




(DNS 서버 실행)



netstat로 확인해보니
tcp, udp 모두 53번 포트가 열려있는 것을 확인 할 수 있다.

이유는
DNS는 53번 포트를 사용하기 때문이다.

그렇다면 이제 캐시서버 설정은 끝이다.
과연 잘 돌아갈지 직접 DNS 서버를 내가 만든 서버로 지정해보았다.



(DNS 서버 지정)





(인터넷 화면)



인터넷이 잘 되는 모습이다.
내가 만든 DNS 캐시 서버가 잘 동작하고 있음을 알 수 있다.

DNS가 잘 동작하는지 직접 인터넷으로 확인해보는 방법도 있지만
다른 도구도 있다.
nslookup 이다.

윈도우의 cmd 창에서 nslookup을 사용하여 보았다.



(nslookup 사용 화면)



nslookup은 리눅스에서도 마찬가지로 똑같이 사용할 수 있다.




(리눅스 nslookup)



캐시 서버가 잘 동작하는 것을 nslookup을 이용해서까지 확인했다.

이제 실제로 DNS 서버를 구축해보겠다.
실제 Domain Name을 사는 것은 돈이 드니
간단하게 사설망에서 임의로 만들어보겠다.

먼저 DNS 서버를 안정적으로 돌리기 위해 IP 주소를 정적으로 바꾸어주었다.



(IP 설정)



그 후 /etc/named.rfc1912.zones 파일을 수정해주어야한다.

만들어볼 DNS 서버는
최상위 DNS -> " localdomain.com "가 있고 그 아래로 A, B, C, D 가있다.
또 그 아래로 다른 DNS 서버들이 있는 형태이다.
A - 100
   -  88
   - 12

나는 A 도메인에 속해있는 100번의 DNS 서버를 구축해 볼것이다.
정리하면
100.A.localdomain.com 의 주소를 가지는 DNS 서버를 만들 것이다.

먼저 vi 편집기를 이용해 /etc/named.rfc1912.zones를 추가해줘야한다.




(/etc/named.rfc1912.zones 화면)




(/etc/named.rfc1912.zones 화면)



여기 아래에 우리가 설정한 DNS 이름을 추가할 것이다.




(/etc/named.rfc1912.zones 추가 모습)



내가 관리하려는 100 DNS 아래 win 의 주소는 여기에 적지 않고 다른 곳에 적어주어야한다.
여기는
내가 만드려는 DNS 서버의 이름을 적어주는 것이다.

자 설정이 잘 적용됬는지 확인해 본다.
명령어 named-checkconf 를 이용해서 파일이 오류가 없는지 체크해본다.




(체크 화면)



아무것도 뜨지 않으면 오류가 없는 것이다.

우리가 관리할 win의 주소를 설정해 보겠다.

아래의 화면처럼 이동해준다.



(이동)



위 화면을 보면 우리가 적어야할 설정 파일이 보인다.
우리는 저 파일의 형식으로 써야하므로
저 파일을 복사해서 사용하겠다.



(우리가 수정해야할 복사본 파일)



복사 까지 했다면
이제 우리가 관리할 DNS 서버의 정보들을 적어주면 된다.
내일 이어서 DNS 서버를 만들어 보겠다.
:)


오늘은 패스워드 크랙을 해볼 것이다.

패스워드 크랙이란
패스워드를 알아내는 것이다.
아이디에 대한 비밀번호를 찾아내는 것이다.

방법은
무차별 대입 공격(브루트 포스)
사전 공격
중간자대입공격 등등 이 있다.

오늘 해볼 것은 브루트포스와 사전공격이다.
브루트 포스는 무작정 가능한 비밀번호를 다 입력해보는 것이고 (무식, 하지만 컴퓨팅 파워에 따라 효과적)
사전 공격은 비밀번호 일것 같은 애들을 묶어서 그 애들만 집어 넣어 보는 것이다.

먼저 패스워드 크랙을 해보기 위해
서버 리눅스에서 간단하게 FTP 서버를 구축했다.
구축했다기 보다는 .. 프로그램을 설치했다. :)





(설치 명령어)



그 후 공격자 컴퓨터에서 정상적인 접속을 해보았다.


(정상적인 접속 화면.)



정상적으로 아이디와 비밀번호를 입력하고 접속했다.

그 후 FTP 서버가 잘 동작하는지 확인하기 위하여
파일을 다운로드 받아보기로 했다.




(다운 받는 모습)



서버에는 접속하고 이런 로그들이 다 남겨지는데
확인해보겠다.



(로그 화면)




방금 클라이언트가 로그인 한 로그와 다운로드한 로그가 기록된 것을 확인 할 수 있다.

자 이제 패스워드 공격을 우리가 구축한 FTP 서버로 시도해 보겠다.

(경고-이 공격은 불법이므로, 절대로 남의 패스워드를 크랙해서는 안된다.)

무차별 대입공격으로 hydra 라는 툴을 사용할 것이다.
패스워드 크랙 툴로써 오늘 사용해봤는데 신기하고 재밌는 툴이다.



(명령어 입력)


명령어 입력 화면이다.
-t 는 쓰레드의 개수를 설정해주는 것이고
-w 는 쓰레드의 웨이팅 타임을 설정하는 것이다.
짧으면 좋다고 했는데 너무 짧으면 패스워드를 못알아낸다...
로그인하고 응답오는 시간을 감안하는게 좋은거 같다.
-l 아이디를 입력한다.
-V 과정을 보여준다.
-f 비밀번호를 찾으면 종료한다.
-x 는 다양한 비밀번호 유형을 설정하는데 위에 설정한건 4~6자리의 소문자이다.

패스워드 크랙의 시간을 짧게하기위해 일부러
FTP서버의 비밀번호를 잠깐 abaa 로 바꾸었다.




(비밀번호를 찾은 모습)



패스워드 크랙 성공 모습이다.

이번엔 같은 툴로 사전 공격을 해보겠다.
사전 리스트를 만들어준다.




(사전 리스트)


비밀번호로 예상되는 것들의 리스트를 만들어준다.

명렁어에 pass.list를 추가해준다.



(명령어 입력)





(성공 화면)



비밀번호가 정확히 크랙된 모습을 볼 수 있다.

이번에는 다른 툴을 써보겠다.

msfconsole 이라는 툴(?) 메타스플로잇이다.
해킹툴 도구집합체?! 




(msfconsole 툴 시작)




(첫 화면)



첫 화면이다.

재밌는 모양으로 생겼다 :)

ftp_login에 사용될 툴을 찾는다. search




(검색 화면)




(ftp_login)



우리는 저기 나와있는 ftp_login 을 이용할 것이다.

use 명령어로 실행한다.




(설정화면)



실행하고 설정을 해준다. (대상 아이피라던지 등등)



(크랙 성공 화면)



이 또한 순식간에 크랙된 것을 확인 할 수 있다.



DHCP 서버를 설치까지 했다.

이제 DHCP 서버를 이용해 서비스를 제공해보겠다. :)

우선 DHCP의 동작을 살펴보겠다.

DHCP는 어떻게 동작

1. 클라이언트는 과연 언제 임대 요청을 하게될까?
 1) 컴퓨터를 처음 켰을 때
 2) 임대시간이 만료가 되었을 때
 3) 최대 임대시간이 만료가 되었을 때

2. DHCP Message 종류
 1) DHCP Discover
 2) DHCP offer
 3) DHCP Request
 4) DHCP ACK

각 타입의 내용
1) DHCP Discover
 - 아이피를 할당받지 못했기 때문에 통신이 안되는 상황이고 서버가 누군지도 모르기 때문에
 -> Broadcast로 뿌린다.
 - MAC 주소로 통신을 한다.
 - Bootstrap Protocol 이라고 적혀있다. 이것은 지금 현재 DHCP이다.
2) Offer
 - 디스커버의 응답이다.
 - 서버가 호스트에게 디스커버의 응답으로 전달한다.
3) Requset
 -같은 네트워크 상에서 내가 이 아이피를 쓰겠다고 브로드 캐스트 하는 것이다.

상황
 1) 클라이언트가 서버로 아이피 배당해달라고한다. (디스커버)
 2) 서버는 응답한다. (Offer)
 3) 클라이언트는 이제 그 아이피를 쓴다고 주변에 브로드 캐스트한다.(Request)
 -> 이 과정이 없으면 아이피가 충돌난다. 다른 DHCP 서버는 모르기 때문에
 4) 마지막으로 서버가 클라이언트에게 ACK 패킷을 보내면서 아이피 배당이 끝난다.

우리는 이제 Offer 패킷을 보낼 때의 내용을 채워줘야한다.
Offer 패킷을 보낼 때 배당할 아이피 범위, 라우터 정보, DNS 정보 등을 설정해주어야한다.

설치된 dhcp 폴더를 들어가보니
dhcp.conf 의 샘플 파일이 있었다.
이 샘플 파일을 먼저 복사한다.




(복사하는 장면)



복사된 conf 파일을 vi 편집기로 연다.




(vi 편집기)



샘플 파일이다.
우리는 이것을 수정해서 사용할 것이다.




(DHCP conf 설정 부분)



이 부분을 수정해 줄것이다.



(수정된 모습)



우리의 네트워크 환경에 맞추어 설정해주었다.




(DHCP 서버 실행)



이제 저장하고
DHCP 서버를 실행시켰다.

그 후 leases 폴더를 들어가 지금 임대하고 있는 아이피 목록을 볼 수 있었다.



(아이피 배당한 목록)



DHCP 서버가 잘 돌아가고 있음을 알 수 있다.

그러면 호스트에서 이번에 Wireshark로 DHCP 패킷을 분석해 보겠다.




(캡쳐 필터링)



패킷 캡쳐 시작 전에
필터링룰을 설정하여 패킷을 받아주었다.



(DHCP 패킷)



DHCP 동작의 4개 패킷이 캡쳐된 모습이다.




(Discover 패킷)



디스커버 패킷으로
아직 IP주소가 없으므로 0.0.0.0 으로 나오는 것을 확인 할 수 있고
요청 IP주소도 볼 수 있다.



(Offer 패킷)



Offer 패킷의 내용을 살펴보면
우리가 위에서 설정해준 내용이 그대로 들어가 있음을 확인 할 수 있다.

이러한 DHCP의 취약점이 어떤게 있을까?

-> 만약 악의적인 목적으로 DHCP 서버를 운영한다면???
DHCP서버는 같은 네트워크에 여러개가 동작할 수 있다.
즉, 누구나 원하면 DHCP 서버를 구축하여 동작시킬 수 있다는 것이다.

그렇게 되면 DHCP 설정에서 잘못된 게이트웨이 주소를 알려주거나
잘못된 DNS 주소(해커가 구축한 DNS, 해킹한 DNS등등) 을 알려주게되면
큰 위험에 빠질 수 있다.

반대의 입장이 되보면
공격자 입장에서는 DHCP 서버하나만 구축해놓고 손쉽게
스니핑, 스푸핑(DNS, DHCP..) 를 할 수 있게 되는 것이다.

아래는 공격받은 모습이다.



(공격 받은 모습)



IP 151번에게 IP주소를 배당 받았다. 동시에 게이트웨이 주소를 보면
192.168.3.151로 되어있다.
즉 나는 인터넷을 할 때 공격자에게 패킷을 보내게 되는 것이다.

만약 공격자가 포워딩을 안해준다면,



(인터넷 멈충)



인터넷이 동작하지 않는것을 확인 할 수 있다.(통신이 안된다.)

만약 공격자가 포워딩도 해주면
나는 인터넷도 되고 아무것도 모른채 패킷을 스니핑 당할 수 있다.

리눅스에서 포워딩 하는 방법은 간단하다.



(포워딩 설정)



sysctl net.ipv4.ip_forward 를
1로 바꾸어주면 자동으로 포워딩 까지 해주게 된다.


오늘은 로그인페이지에서 데이터베이스를 구축하고
아이디/비밀번호를 체크해서 로그인을 해보겠다.

아직 DB 공부는 안해서 DB 공부 들어가기전에
메모장을 이용해서 아이디 비밀번호를 관리해서 구현해보겠다.

먼저 메모장 파일을 만든다.



(아이디/비밀번호 파일)


아이디         비밀번호
root               toor
hack             1234
security          aaa

이렇다.

이 파일에서 입력받아서 ArrayList로 만들것이다.
이 과정은 앞으로 계속 사용할 것이므로 java 파일로 만들어 둘것이다.
소스에서 패키지 만들고 class를 생성하였다.




(DB 받아들이는 파일)



이제 이 파일을 이용해 메모장 DB를 접근하여
아이디/비밀번호를 체크해 보겠다.

로그인 체크는 로그인 체크.jsp 에서 확인하는 코드를 추가하였다.



(체크 하는 코드 추가)



filename 을 경로를 지정 받아서 filename을 만들었다.
그 후 db 배열에 입력하였다.

그 후 멤버의 수를 계산하였다. 그 이유는 인덱스를 나중에 계산하기 위해서이다.

contain 메서드를 이용해 id를 체크하고
인덱스를 계산하였다.

그 후 아이디/비밀번호를 체크하였다.

실행 화면은 다음과 같다.




(없는 아이디를 입력)





(아이디와 비밀번호를 다시 확인해달라고 나왔다.)



(지금 쓰면서 생각 난 것인데, 이 부분을 아이디와 비밀번호를 확인해달라고 경고창을 띄우고
 다시 로그인 화면으로 돌아가게 할 것이다. 나중에 이 코드를 추가할 것이다. )





(존재하는 아이디, 하지만 틀린 비밀번호 입력)





(오류 화면)



이 화면에서 전과 똑같은 구문을 추가한 이유는
보안상 이유로 두개의 같은 구문으로 통일 시켰다.




(존재하는 아이디/비밀번호 입력)






(로그인 성공 화면)



제대로 성공했다고 뜨는 화면이다.

여기서
아이디로 비밀번호를 체크하는 과정을 추가해보려고 한다.
아이디를 추가하는건 조금 복잡할 것 같아서 일단 단순한
비밀번호를 찾는 기능을 추가하였다.

비밀번호 찾는 페이지에 코드를 추가하였다.





(비밀번호 찾기 페이지)



아이디 입력하면 그 아이디를 find.jsp 로 아이디를 보내준다.
find 페이지에서 이 아이디로 비밀번호를 찾아서 출력해 줄 것이다.



(find.jsp)



여기서는 경고창으로 설정하였다.
아이디가 존재하지 않으면 해당 아이디가 없다고 출력을 해주고
해당 아이디가 있으면 해당 아이디에 일치하는 비밀번호를 출력해준다.



(아이디/비밀번호 찾기 클릭)





(아이디/비밀번호 찾기 페이지)



없는 아이디를 입력해보겠다.




(없는 아이디 입력)

(결과 화면)




존재하는 아이디를 입력해보겠다.





(존재하는 아이디 입력)


(비밀번호 출력)



여기서 치명적인
논리적 헛점(?) 을 발견하게 되었다....




(비밀번호를 입력)






(오류화면)



그 이유는 코드에 있었다..
다시 잘 보면..



(문제 코드 화면)



id를 찾는 과정에서 db에서 contain 함수로 찾기 때문에
비밀번호를 찾아도 아이디라고 생각하고 그 값의 인덱스를 출력하고

그 출력에다가 멤버의 수를 더하니 db의 인덱스를 초과해서
에러 화면이 나오는 것이다.
...
..
그렇다는 것은
로그인 화면에서도
아이디에 비밀번호를 입력하면
에러 화면이 뜰것이라는 것이다..

내일 이 부분에 대해서 수정을 해야할 필요가 있다.
내일은 이 부분에 대해서
보완을 해보겠다...! ㅜㅜ



오늘은 와이어샤크에 대해서 알아보겠다.

아래는 와이어샤크 첫 화면이다.

여기서 인터페이스를 선택할 수 있다.
선택 후 그 인터페이스로 들어오는 패킷을 보여준다.




(와이어샤크 첫 화면)



와이어 샤크 파일을 저장해서
원하는 곳에서 열어서 분석을 할 수 있다. -> 수집된 위치에서만 분석할 수 있는 것이 아니다.



(저장화면)




(저장 파일)



이 파일을 열면 와이어샤크에서 받은 패킷들의 내용을 그대로 볼 수 있다.
pcapng 확장자로 설정되어있다.

레이아웃을 보기 편하게 바꾸어 볼 것이다.

편집에 들어가서




(편집 선택)



Preferences 에 들어가면 아래와 같은 화면이 나온다.

Layout 선택 하는 화면이다.



(Layout 설정)



난 2번째것으로 설정해주었다.

* 와이어 샤크가 제공하는 필터링 기능
1. 캡쳐 필터
 - 패킷을 캡쳐할 때 적용되는 룰
 - 복잡한 룰을 적용할 수 없다. (적용하지 않는게 좋다.)
 -> 캡쳐할 때 부하가 걸린다.
 - 캡쳐필터할 때는 단순한 룰을 적용시킨다.
 -> 수집 단계에서 필터링이 적용된다.
 - 캡쳐 필터는 신중하게 작성할 필요가 있다.
 - 아이에 수집이 안되기 때문에 최소한으로 적용시키는 것이 좋다.

2. 디스플레이 필터
 - 패킷을 캡쳐한 이후에 적용하는 룰
 - 성능과 관계없이 룰을 적용
 - 아주 복잡한 룰도 적용이 가능하다.

먼저 패킷 필터부터 살펴보겠다.
패킷필터는 캡쳐 위에 옵션에 들어가서 설정해줄 수 있다.




(패킷 필터 화면)



빨간색 부분에 필터링 룰을 입력하면 된다.

혹은 룰을 세팅해두어서 나중에 필요할 때 써도 된다.




(필터링 룰 설정)



아래는 캡쳐 필터를 직접 입력해주는 모습이다.



(필터링 룰 직접 입력)



디스플레이 필터는
캡쳐가 이미 된 후에 화면에서 필터링하는 것이다.

화면에서 아래에 표시된 부분에 디스플레이  필터링 룰을 입력하는 곳이다.



(IP 주소 필터)



IP 주소로 필터링을 하는 모습이다.

이 외에 다양한 필터링 룰이 있는데
화면 오른쪽에 Expression 버튼을 누르면
다양한 필터링 룰이 나온다.
아래는 필터링 룰 화면이다.


(필터링 룰 화면)




처음에는 여기서
찾아가면서 입력하면 된다.


이제 와이어샤크의 간단한 입문을 마무리하고 응용프로토콜을 살펴보겠다.

1. UDP 통신을 하는 응용 프로토콜
 - DHCP ( Dynamic Host Configuration Protocol )
 - DNS ( Domain Name System )
 - TFTP

2. TCP 통신을 하는 응용 프로토콜
 - FTP (File Transfer Protocol)
 - HTTP ( HyperText Transfer Protocol ) : WEB
 - SMTP ( Simple Mail Transfer Protocol ) : mail전송 프로토콜

응용프로토콜의 종류는 위와 같다.

제일 먼저 살펴볼 것은 DHCP 이다.

* DHCP ( Dynamic Host Configuration Protocol )
 - 동적으로 자동으로 IP 할당을 하게 해주는 것.
 - 네트워크를 알지 못해도 통신이 가능하다.
 
 - 가상머신(리눅스)을 통해서 DHCP 서버를 구축해볼 것이다.
 - 서버를 구축한다 -> 서비스를 제공하겠다.

* 리눅스 운영체제가 서비스를 제공하지 않는다.
-> 어떤 운영체제만으로 특정 서비스를 제공할 수 없다.
* 서버를 구축 -> 서비스를 제공한다. -> 서비스를 제공할 수 있는 응용프로그램(데몬)을 설치 후 실행한다.
( 운영체제가 서비스를 제공하는 것이 아니라 운영체제 위의 프로그램이 서비스를 제공하는 것이다.)

리눅스에서 DHCP 설치 하는 과정이다.



(search 해준다.)


먼저 설치할 파일을 찾아준다.
명령어 yum search dhcp



(리스트들이 나온다.)



우리는 여기서 dhcp.x86_64 를 설치해 줄것이다.




(설치 화면)



yum install dhcp.x86_64
를 입력해주어 설치를 한다.



(설치가 완료된 모습)



DHCP가 설치된 모습을 확인 할 수 있다.


+ Recent posts