일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- sqli
- gosec
- firewall
- JSP
- Juice Shop
- 자료구조
- OWASP
- juice-shop
- 백준알고리즘
- C언어
- ubuntu
- CodeQL
- MySQL
- Network
- github
- 알고리즘
- SUA
- LGTM
- 운영체제
- OpenSource
- Codeup
- goKart
- JDBC
- gotify
- DVWA
- Database
- virtualbox
- github action
- 데이터통신
- Python
- Today
- Total
비트(bit)주세요
스푸핑 공격 본문
spoofing : 속이는 것
스푸핑은 속이는 것 입니다.
자신을 위장해서 남을 속이는 공격이라고 할 수 있죠.
공격의 대상은 MAC주소, IP주소, 포트 등 네트워크 통신과 관련된 모든 것이 될 수 있습니다.
스푸핑 공격으로 무엇들을 할 수 있을까요?
- 시스템 권한 얻기
- 암호화된 세션 복호화하기
- 네트워크 트래픽 흐름 바꾸기
같은 것들을 예로 들 수 있는데, 이 외에도 다양하게 사용될 수 있다 합니다.
이 글에서는 스푸핑 공격의 종류엔 어떤 것들이 있는지 알아보겠습니다.
스푸핑 공격의 종류
1. ARP 스푸핑
2. IP 스푸핑
3. ICMP 리다이렉트 공격
4. DNS 스푸핑 공격
1. ARP 스푸핑
ARP 프로토콜 : 네트워크 상에서 IP 주소를 MAC 주소로 대응시키기 위해 사용되는 프로토콜.
상대 IP는 알지만 MAC주소는 모를때 사용합니다.
MAC 주소를 몰라 메시지를 보낼땐 네트워크에 존재하는 모든 호스트에 메시지를 보냅니다.
ex) IP 주소가 1.1.1.2인 호스트는 저에게 본인의 MAC주소를 보내주세요~
ARP 스푸핑은 MAC주소를 공격자의 MAC주소로 속여서 클라이언트에서 서버로 가는 패킷이나
서버에서 클라이언트로 가는 패킷이 공격자에게 향하게 함으로써 랜의 통신 흐름을 왜곡합니다.
1. 공격자는 클라이언트와 서버에게 가짜 MAC 주소를 알립니다.
2. 서버와 클라이언트가 통신을 하게 되면, 공격자에게 패킷을 보냅니다.
3. 공격자는 각각으로부터 받은 패킷을 읽은 후, 통신 흐름에 맞게 패킷을 보내줍니다.
: 클라이언트 -> 공격자 -> 서버
서버 -> 공격자 -> 클라이언트
윈도우에서는 apr -a 명령으로, 현재 인지하고 있는 IP와 해당 IP를 가지는 MAC 주소 목록을 확인할 수 있습니다.
위 사진에서 나타나는 정보는 ARP 테이블이라고 합니다.
위 arp spoofing 사진에서 스푸핑 공격을 당하기 전, 후에 arp -a 명령어를 실행하게 되면 다음과 같습니다.
ARP 스푸핑 공격의 대응책은 ARP 테이블이 변경되지 않도록 MAC 주소 값을 고정하는 것입니다.
명령어 : arp -s [IP 주소] [MAC 주소]
하지만 이 대응책은 시스템을 재시작할 때마다 수행해야 합니다. 번거롭습니다.
어떠한 보안 툴은 클라이언트의 ARP 테이블 내용이 바뀌면 경고 메시지를 보냅니다.
하지만 ARP 스푸핑은 TCP/IP 프로토콜 자체의 문제로 근본적인 대책이 없습니다.
2. IP 스푸핑 공격
말 그대로 IP를 속이는 것입니다.
다른 사용자의 IP를 강탈하여 어떤 권한을 획득하는 것입니다.
트러스트 관계를 맺고 있는 서버와 클라이언트를 확인한 후 클라이언트에 서비스 거부 공격을 합니다.
그러면 클라이언트는 연결이 끊어지게 됩니다.
공격자는 클라이언트의 IP주소를 확보해, 실제 클라이언트처럼 패스워드 없이 서버에 접근합니다.
트러스트?
: 서버에 클라이언트 정보를 미리 기록해두고 그 클라이언트가 서버에 접근하면
아이디와 패스워드 입력 없이 로그인을 허락하는 인증법
Unix : 트러스트 인증법
-> /etc/host.equiv 파일에서 설정
1.1.1.1 root : 1.1.1.1에서 root계정이 로그인을 시도하면 패스워드 없이 로그인 허락
2.2.2.2 + : 2.2.2.2에서는 어떤 계정이든 로그인을 허락
Windows : 액티브 디렉터리
트러스트를 이용한 접속은 네트워크에 패스워드를 뿌리지 않습니다.
-> 스니핑 공격에 안전한 것처럼 보입니다.
-> 하지만 IP를 통해서만 인증이 일어납니다.
-> 공격자가 해당 IP를 사용하여 접속하면 굳이 스니핑을 사용할 필요는 없습니다.
IP 스푸핑에 대한 대응책은 트러스트를 불가피한 경우를 제외하고 사용하지 않는 것입니다.
트러스트를 사용할 경우엔 트러스트로 묶는 구성 서버 가운데 취약한 패스워드가 있으면 안됩니다.
-> 취약한 계정하나가 트러스트로 연결된 구성 서버를 모두 위험에 빠뜨릴 수 있습니다.
3. ICMP 리다이렉트 공격
ICMP 리다이렉트는 네트워크 계층에서 스니핑 시스템을 네트워크에 존재하는
또 다른 라우터라고 알림으로써 패킷의 흐름을 바꾸는 공격입니다.
ICMP 리다이렉트는 왜 사용하지?
: 보통 네트워크는 라우터와 게이트웨이가 하나인데, 하나의 라우터로 감당할 수 없을 때
라우터 게이트웨이를 2개 이상 운영해서 로드 밸런싱을 합니다.
로드 밸런싱은 시스템의 라우팅 테이블에 라우팅 엔트리를 하나 더 넣거나
ICMP 리다이렉트 방법을 이용하는 것입니다.
로드 밸런싱?
: 여러 시스템이나 네트워크가 일을 분산해서 처리할 때 효과적으로 하기 위해
부하를 적절히 나눠주는 것
1. 호스트 A에 라우터 A가 기본으로 설정되어 있기 때문에 호스트 A가 원격의 호스트 B로
데이터를 보낼 때 패킷을 라우터 A로 보냅니다.
2. 라우터 A는 호스트 B로 보내는 패킷을 수신합니다. 그리고 라우팅 테이블을 검색하여
호스트A가 자신을 이용하는 것보다 라우터B를 이용하는것이 더 효율적이라고 판단해
해당 패킷을 라우터 B로 보냅니다.
3. 라우터 A는 호스트 B로 향하는 패킷을 호스트 A가 자신에게 다시 전달하지 않도록
호스트 A에 ICMP 리다이렉트 패킷을 보내어 호스트 A가 호스트 B로 보내는 패킷이
라우터 B로 바로 향하게 합니다.
4. 호스트 A는 라우팅 테이블에 호스트 B에 대한 값을 추가하고 호스트 B로 보내는 패킷은
라우터 B로 전달합니다.
요약 : 효율적으로 데이터를 전송하도록 라우터가 호스트에
경로 수정 요청을 보내서 호스트가 경로를 재설정합니다.
ICMP 리다이렉트를 이용한 공격자가 라우터 B가 되는 것입니다.
-> ICMP 리다이렉트를 공격 대상에게 보냅니다.
-> 공격 대상에게 보낸 후, 라우터 A에 다시 연결하면 모든 패킷을 스니핑 할 수 있습니다.
4. DNS 스푸핑 공격
DNS 스푸핑은 실제 DNS 서버보다 빨리 공격 대상에게 DNS response 패킷을 보내어
공격 대상이 잘못된 IP 주소로 웹 접속을 하도록 유도하는 공격입니다.
웹 스푸핑과 비슷한 의미로 해석됩니다.
단순히 DNS 서버를 공격하여 해당 사이트에 접근하지 못하게 하면 DoS 공격이 되지만
이를 조금만 응용하면 웹 스푸핑이 됩니다.
공격자가 자신의 웹 서버를 하나 만들고 공격 대상이 자주 가는 사이트를 하나 골라
웹 크롤러 프로그램으로 해당 사이트를 긁어옵니다.
그리고 아이디와 패스워드를 입력받아 원래 사이트로 전달해주는 스크립트를
간단하게 프로그래밍 하면?
1. 공격 대상은 사이트 주소를 입력하고 접속한 뒤, 접속하던 사이트와
똑같은 것을 보고 당연히 정상적으로 접속했다고 생각할 것입니다.
2. 공격 대상은 늘 그랬던 것처럼 아이디와 패스워드를 입력할 것 입니다.
3. 이 때 평소보다 로그인이 약간 느리게 됩니다.
->해커가 그 아이디와 패스워드를 받아 원래 사이트로 넘겨줘야 하기 때문입니다.
DNS 스푸핑 전에, DNS 서비스가 어떻게 작동되는지 알아보겠습니다.
1. 클라이언트가 DNS 서버에 접속하고자 하는 IP 주소를 물어봅니다.
-> 이 때 보내는 패킷이 DNS query 입니다.
2. DNS 서버가 해당 도메인 이름에 대한 IP 주소를 클라이언트에 보냅니다.
3. 클라이언트가 받은 IP 주소를 바탕으로 웹 서버를 찾아갑니다.
DNS 패킷은 UDP 패킷입니다.
-> 세션이 없습니다.
-> 먼저 도착한 패킷을 신뢰합니다.
-> 나중에 도착한 패킷은 버립니다.
DNS 스푸핑의 과정은 다음과 같습니다.
1. 클라이언트가 DNS 서버로 DNS query 패킷을 보내는 것을 확인합니다.
스위칭 환경에서는 클라이언트의 DNS query를 받아야 합니다.
-> ARP 스푸핑과 같은 작업이 필요합니다.
허브 환경에서는 모든 패킷이 자신에게 전달되므로 자연스럽게 확인 가능합니다.
2. 공격자는 로컬에 존재하므로 지리적으로 DNS 서버보다 가깝습니다.
-> DNS 서버가 올바른 DNS response 패킷을 보내주기 전에
클라이언트에 위조된 DNS response 패킷을 보낼 수 있습니다.
3. 클라이언트는 공격자가 보낸 DNS response 패킷을 올바른 패킷으로 인식합니다.
-> DNS 서버가 보낸 정상적인 DNS response 패킷은 버립니다.
4. 클라이언트는 공격자가 위조한 사이트에 접속을 하게 됩니다.
위의 과정이 아니여도, 네트워크의 특정 URL에 거짓 IP정보를 계속 브로드캐스팅하면
해당 패킷을 받은 클라이언트는 잘못된 IP 주소로 찾아갑니다.
그렇다면 DNS 스푸핑의 대응책은?
중요 서버에 대해 DNS query를 보내지 않으면 됩니다.
여기서 궁금증
: URL만 알고 IP는 모르는데 어떻게 그곳에 접속하지?
-> 윈도우와 유닉스 모두 URL에 대한 IP를 확인할 때
처음부터 DNS query를 보내는 것이 아닙니다.
-> 먼저 시스템 메모리의 정보를 확인하고
그 다음에 host 파일에 등록된 정보를 확인합니다.
= 클라이언트에서 DNS 서버로 쿼리를 보내기 전에 host파일을 참조합니다.
중요 접속 서버의 URL에 대한 IP를 host 파일에 등록해놓으면 됩니다.
하지만 모든 서버의 IP를 등록하는 것은 무리입니다.
-> 모든 서버에 대한 DNS 스푸핑을 막기는 어렵습니다.
'정보보안 > 네트워크 보안' 카테고리의 다른 글
세션 하이재킹 공격 (0) | 2021.05.14 |
---|---|
스니핑 공격 (0) | 2021.05.06 |
서비스 거부 공격: Dos, DDos(2) (0) | 2021.05.06 |
서비스 거부 공격: Dos, DDos(1) (0) | 2021.05.06 |