DNS스푸핑 공격
DNS스푸핑은 IP주소를 변조 또는 사용자가 의도하지 않은 주소로 접속하게 만드는 공격방법으로, 웹 스푸핑과 비슷한 의미로 이해되기도 한다.
정상적인 DNS 서비스는 다음과 같은 방식으로 이루어진다. 클라이언트가 DNS 서버에 접속하고자 하는 IP주소를 물어보면(이때 보내는 패킷: DNS Query), DNS 서버가 해당 도메인 이름에 대한 IP주소를 클라이언트에 보내주고, 클라이언트는 DNS서버에서 받은 IP주소를 바탕으로 웹 서버를 찾아간다.
DNS패킷은 UDP 패킷이므로 세션이 존재하지 않는다. 또한 먼저 도착한 패킷을 신뢰하며 다음에 도착한 정보는 버린다. 따라서 만약 공격자가 DNS서버보다 더 빨리 피해자에게 DNS의 응답 메시지를 보내 서버의 아이피를 속이면, 뒤늦게 진짜 DNS 서버가 보낸 응답은 자동으로 버려지기 때문에 피해자는 공격자의 시스템으로 접속하게 된다. 이러한 특징을 이용해 DNS 스푸핑 공격을 하고자 한다.
DNS 스푸핑 공격은 다음과 같은 방식으로 이루어진다. 우선 클라이언트가 DNS 서버로 DNS Query패킷을 보내는 것을 확인한다. 이를 위해서는 ARP스푸핑과 같은 선행 작업이 필요하다. 공격자는 로컬에 존재하기 때문에 DNS 서버보다 지리적으로 가까워, 위조된 DNS response 패킷을 클라이언트에게 더 빨리 보내줄 수 있다. 이후 클라이언트는 위조된 DNS response 패킷을 올바른 패킷으로 인식하고 웹에 접속하게 된다.
이처럼 DNS 스푸핑 공격은 목표대상을 정확히 설정하고 타이밍을 잘 맞춰야 성공할 수 있기 때문에 ‘시간차 공격’이라고도 할 수 있다.
1. 실험 환경
공격자 시스템: 칼리 리눅스
공격 대상 시스템: 윈도우
필요 프로그램: weeman툴
2. 공격 과정
1) github에서 weeman 저장소를 복사한다.
$ git clone https://github.com/samyoyo/weeman
samyoyo/weeman
HTTP Server for phishing in Python. Contribute to samyoyo/weeman development by creating an account on GitHub.
github.com
(이미 파일이 있어서 위와 같이 뜬다.)
2) ls로 weeman이 다운되어 있는 것을 확인
3) cd weeman을 입력해 weeman에 들어가준다.
4) 다시 한번 ls로 weeman 안에 있는 파일들을 확인한다.
(weeman.py가 있는 것을 알 수 있다.)
5) ./weeman.py을 입력해 파이썬으로 된 위맨을 실행하여준다.
(weeman이 정상적으로 실행됨.)
6) help을 이용해 무슨 내용이 있는지 확인한다.
7) show를 입력해본다.
8)
set url을 입력하여 해당 사이트가 뜨도록 한다. (www.facebook.com 으로 해주었다.)
set action_url을 이용해 사용자가 어떤 행동을 한 후에 실제페이지로 이동하게끔 하였다. (페이스북의 login페이지로 설정하였다.)
run으로 실행시킨다.
9) 피싱 이메일을 만들기 위해서, 새 터미널 창을 열어 ifconfig를 사용해 자신의 아이피를 확인한다.
>> 192.168.33.133이다.
10) 피싱 이메일을 만든다. www.facebook.com 에다가 url링크를 거는데, 이때 192.168.33.133:8080으로 입력해 위 링크를 눌렀을 때에 앞서 만든 피싱사이트로 이동되게끔 한다.
11) 메일로 온 피싱사이트 링크를 눌러 피싱사이트로 이동한다.
아이디로는 hello, 비밀번호로 world!를 입력후 파란 버튼을 누른다.
12) 리눅스를 확인해 보면 사용자의 id와 비밀번호가 넘겨진 것을 확인할 수 있다.
4. 결과분석
- weeman툴을 이용해 피싱사이트를 손쉽게 구축하고, 사용자의 입력 정보가 그대로 넘겨지는 것을 확인할 수 있었다.
- 아쉬운 점
1. set url로 연결한 페이지가 한글이 제대로 뜨지 않고 깨진다.
2. 로그인 버튼을 눌렀을 때에 원하는 페이지로 이동되지 않는다.
- 대응방안
1. 브라우저에 도메인 이름을 입력하면 무조건 DNS Query를 생성하는 것은 아니고, 사이트에 접속하면 MAC처럼 도메인 이름에 대한 IP주소가 캐시에 저장되었다가 다시 접속하였을 때에 DNS Query를 보내지 않고 캐시에서 읽어들인다. 그런 다음 hosts 파일을 통해 도메인 이름에 대한 IP주소를 해석한다.
따라서 hosts 파일에 중요한 사이트들의 IP주소를 확인하여 적어두면, 이 파일에 있는 사이트에 대해서는 DNS스푸핑 공격을 당하지 않는다.
2. BIND(Berkely Internet Name Domain)을 최신 버전으로 바꾸는 것도 하나의 방법이다. BIND의 최신 버전은 PTR레코드뿐만 아니라, PTR 레코드에 의한 A 레코드 정보까지 확인한 후 네임 서버의 데이터베이스 파일 변조 여부까지 판단한다.
5.자료화면
'보안 & 해킹 실습' 카테고리의 다른 글
[웹보안] webhacking.kr - old challenges 21번 문제 풀이 및 결론 (0) | 2021.06.01 |
---|---|
[Mac m1] 우분투 리눅스 설치 - 실패!^^ (0) | 2021.05.30 |
VMware Workstation 12 Player_우분투 인터넷 연결 안 될 때 (0) | 2021.04.01 |
[환경구축] 우분투 설치하기, 해킹환경 구축하기 (0) | 2021.03.19 |