네트워크보안 - Spoofing
Spoofing이란?
공격자가 마치 공격 대상자인 것 처럼 행세하는 것 (따라하거나 , 짖궂은 장난, 흉내를 내서 부가적인 목적을 달성)
sniffing과는 다르게, 티 안내기 위해 다시 돌려준다거나 그런거 없음.
(1) 송신자와 수신자 사이에서 중간에서 가로채기
(2) 송신자와 수신자 사이에서 수신자인 척하고 msg를 빼돌려서 변조하기도 함.
다양한 Spoofing 기법
구분 | 공격 계층 |
ARP spoofing | 2계층 |
IP spoofing | 3계층 |
ICMP redirect | 3계층 |
DNS spoofing | 7계층 |
- 2계층 공격은 공격자가 같은 스위치 내에 존재할 때
- 3계층과 7계층 공격은 내부와 외부에서 둘다 공격이 가능하다.
ARP Spoofing
- 멀쩡한 MAC주소를 바꾸는 것이라고 생각하면 됨!
ARP spoofing은 IP주소를 보내더라도 MAC주소로 변환되는 성질을 악용하는 것이다.
STEP 1 : B의 MAC주소를 가짜 MAC주소로 변경 ( 즉 공격자 자신의 MAC으로 변경)
- 공격자 says "나는 B라고 해. 나의 MAC주소는 이거야." 라고 하면서 ARP응답에 자신의 MAC주소를 붙여 보낸다.
- A의 ARP 테이블에는 B의 MAC주소가 업데이트 된다.
STEP 2 : B에게 보낼 msg가 공격자에게 전송된다.
- A가 B의 IP주소인 IP(b)로 전송하면 그에 해당되는 MAC주소인 공격자의 MAC주소로 변환된다.
- 공격자는 spoofing 중이므로 원상복구를 하는데에는 관심이 없을수도..
- ARP는 UDP로 동작한다.
ARP spoofing을 이용한 sniffing공격
- 스위치 내의 모든 단말의 MAC 주소를 공격자의 MAC 주소로 설정한다.
- A>B로 무언가를 보낸다고 가정하면 공격자가 먼저 받아보고 B에게 보내준다. B는 A의 MAC주소가 공격자의 MAC주소로 설정되어있으므로 당연히 문제를 파악할 수 없지.
- sniffing이므로 공격자가 A의 것 열어보고 다시 B에게 원상복구 꼭 해준다..
ARP spoofing의 탐지
(1) 지속적인 ARP의 응답이 발생한다면 ... ?
- wireshark : 들어오고 나가는 pkt들을 분석할 수 있는 프로그램이다.
- wireshark에서 > ARP응답을 통해 하나의 IP주소가 기존 MAC주소 외에 새로운 MAC주소에 mapping 되어있다면 spoofing이 일어나고 있다고 판단한다.
(2) ARP table에서 중복된 MAC 주소를 확인
- 명령어 : arp -a
- 서로 다른 IP주소가 같은 MAC주소를 가지고 있다면 ARP spoofing으로 인식가능.
(3) ARP table 감시 프로그램 사용
ex) xarp, arpwatch
(4) network 속도의 저하
보통 spoofing에 sniffing이 같이 붙어다니기 때문에 속도 저하가 심하다.
ARP spoofing 방지 대책
- 정적 ARP table 관리 (수동으로 일일히 수정해야하므로 당연히 비용이 증가, 특히 규모가 큰 망에서는 사용이 불가능해서 subnetwork를 별도로 구성해서 사용하기도 함)
- 보안 수준을 강화하기 ( 백신 설치, OS의 보안 update 정기적으로 시행)
IP Spoofing (3계층)
- IP spoofing은 공격자의 IP주소를 다른 IP로 속이는 방법이다. 자신의 IP주소를 변조하는 것이 핵심.
- 3계층에서 IP 헤더에 src IP와 dst IP를 붙인다. 이때 src IP를 변조
TRUST 관계에서 IP spoofing이 위협적인 상황
- A와 B가 서로 IP주소를 기반으로 인증없이 서로를 신뢰하는 관계라고 하면
- 공격자가 우선적으로 server A를 DoS같은 것으로 공격해서 불능상태로 만들어둔다.
- 공격자는 그 다음 B에게 "야 나 A야!!" 하고 메세지를 보낸다 ( 당연히 이 과정에서는 IP_A로의 변조가 일어날 것이다.)
- server B는 아무 의심없이 메세지를 허용한다. (trust관계이기 때문이다)
IP spoofing이 좋은 의도로 사용되는 예시
- 웹사이트 성능 테스트 프로그램으로, 내부적으로 IP를 변조해서 가상의 user를 생성한다.
- 가상의 유저들에게 서로 다른 IP를 할당해주므로써 test가 가능하다.
- HP사의 Load runner가 있다.
IP spoofing 방지 대책
- IP주소를 기반으로 한 트러스트 관계를 맺지 않는다. (꼭 필요할땐 보안수준 강화해서 써야지 뭐)
- 패킷 필터링 - gateway 밖에서 오는 메시지 중에서 src IP가 내부 IP로 설정된 메시지를 필터링하는 것.
# gateway 밖에서 오는 msg중 src IP가 내부 IP로 설정되어있을 시 이것은 모순이다. gateway를 거쳤다는것은 외부에서 왔다는 의미인데, 어떻게 내부 IP를 가지고 올 수 있겠니..?
ICMP spoofing
* ICMP는 network 상태 확인, 제어를 위해 사용되는 프로토콜이며 IP 프로토콜의 약점을 보완한다. (IP프로토콜은 메세지 전송 중 오류가 생겨도 대처를 안하기 때문)
ICMP의 역할 알아보기
(1) network 진단
ping msg나 traceroute를 통해 network 연결을 확인해볼 수 있음. 명령 프롬포트 창에 입력해서 갔다오는지 확인 가능!
(2) network 흐름 통제, ICMP Redirection
상황을 가정해보자. gateway1과 gateway2가 있고, 1번 gateway는 외부의 망과 연결, 2번 gateway는 내부의 또 다른 망과 연결을 위해 설치가 되어있다. 이때 A가 내부의 다른 망에 속한(즉 gateway2번을 거쳐가야할때) C에게 msg를 보내야한다.
<과정>
- A는 gateway1에게 데이터 전달해달라고 부탁한다.
- gateway1은 자신의 담당이 아니므로, C를 담당하고 있는 gateway2에게 보내준다.
- 그 후에 ICMP redirect 메세지를 A에게 보내주는데, 그 내용은 "야 앞으로 C에게 보낼때는 gateway2에게로 보내면 돼" 이다.
ICMP redirect를 악용한 공격
- 공격자는 ICMP redirect를 victim에게 보낸다.(자신이 gateway인 마냥, 자신의 IP를 보내면서 "야 이제 여기로 보내"라고 말함)
- A는 그 이후로 공격자에게 msg를 보내게 된다.
- sniffing을 성공하기 위해 기존 게이트웨이로 다시 보낸다.
DNS Spoofing
공격 대상에게 전달되는 IP주소를 변조하거나 DNS server에 변조된 IP를 집어넣는다. 엄청나다.
> 일반 사용자가 자신이 공격당했는지 알기 쉽지 않다.
DNS query sniffing을 이용한 공격
# DNS query는 UDP 방식이다. 잘 전송되었는지 아닌지는 신경쓰지 않는다.
- DNS query를 sniffing한다. 당연히 ARP spoofing같은 선행작업이 필요하다.
- client에게 변조된 DNS reply 전송
- victim 시스템이 변조된 DNS reply를 택한다.
> 단순히 먼저 도착한 DNS reply를 채택하는 것이다...UDP 방식이므로 먼저 도착한 것을 택하고 이후에 온건 그냥 무시.
DNS cache poisoning
DNS 서버는 Recursive(순환적) 방식으로 동작함. 계층적으로 공인 네임 서버에 질의를 한다. > 당연히 시간이 오래 걸리겠지
또 이렇게 구해진 IP주소를 캐시에 저장하는 것이 DNS의 동작 방식.
cache poisoning은 DNS 서버의 query를 가로채어 DNS server가 위조된 IP주소를 받도록 설정하는 것이다.
<과정>
- 캐시는 항상 존재하지는 않는다. 일정시간이 지나면 초기화가 됨. 따라서 같은 도메인 네임에 대해 여러번 query를 던질 수 있다.
- 공격자가 대규모 DNS reply를 각각 다 다른 ID로 랜덤하게 생성하여 보낸다.
- DNS에서는 ID값이 얻어걸리는게 하나라도 있다면 공격자가 보낸 reply를 택하게 된다. (계층적으로 질의를 하는 공인네임서버보다 공격자가 속도가 빠르기 때문)
- ID는 16비트이다. "Birthday Paradox"에 따르면 약 6만5천개의 생성가능한 ID중 750개정도만 있어도 확률적으로 하나는 얻어걸리게 된다.
- spoofing도 필요없고, 비교적 간단한 공격이다. 같은 스위치에 연결된 단말도 필요없으며 외부에서도 공격가능.
해결방안 : DNSSEC을 사용한다 ( query 암호화하기), 소프트웨어를 최신으로 업데이트
Session Hijacking
> 두 시스템 간의 연결이 활성화 된 상태를 가로채는 것
TCP Session Hijacking
- 서버와 클라이언트에 각각 잘못된 sequence number를 주고 혼란을 틈타 자신이 끼어들어간다.
- client와 server 사이의 패킷을 통제, ARP spoofing으로 통신 패킷 모두가 공격자를 지나가게 한다.
- 이제 공격자가 server에 client 주소를 이용해 RST 패킷을 ㄹ보낸다.
- 서버는 당황. 잠시 close 상태로 변경한다.
- 공격자가 다시 SYN을 보낸다. server에서는 시퀀스 넘버가 재설정된 것으로 판단하고 다시 TCP 연결을 수행한다.
- 공격자는 TCP연결을 상속받게 된다.
- 바보 client는 아무것도 모른채로 계속 Establish 상태로 있는다....
해결방안 : client와 server사이의 MAC주소를 고정하거나 telnet같은 취약 프로토콜을 사용하지 않고 세션 인증 수준이 높은 프로토콜 (SSH)를 이용한다.