만족

[정보보안] 네트워크 공격: 스니핑, 스푸핑, 세션 하이재킹 본문

[정보보안] 네트워크 공격: 스니핑, 스푸핑, 세션 하이재킹

기타 CS 이론/IT Security Satisfaction 2021. 10. 16. 19:10

Sniffing

주로 유선 연결된 네트워크 상에서 다른 시스템이 보내는 내용을 엿보는 방법.

 

만약 허브 환경이라면 모든 패킷이 모든 네트워크 구성원에게 전달되므로,

이 때 랜카드의 promisicuos 모드를 활성화하면 패킷 필터링 기능이 해제되어 모든 정보를 들여다볼 수 있게 된다.

 

시스템에 꽂힌 랜카드들은 IP주소와 MAC주소를 통해 전송받은 패킷을 필터링해,

자신을 대상으로 하는 패킷만 받아들인다.

 

그러나 스위치 환경에서는 이런 필터링 방식이 스위치에서 이루어지기 때문에 스니핑을 위해 다른 방법을 사용한다.

 

Sniffing: with Switch

 

스위치에는 MAC 테이블이 존재하므로, 들어온 패킷에 대해 목적지 MAC이 몇번 포트에 해당하는 네트워크인지를 알 수 있다.

 

이 때, ARP 프로토콜을 악용하여 원하는 MAC주소 값에 해당하는 IP를 자신의 시스템으로 변조시킬 수 있다.

 

ICMP 리다이렉트를 악용하는 방법도 있다.

 

라우팅 중 더 적절한 라우터를 발견하면 클라이언트에게 ICMP 리다이렉트 메시지를 발송하여

패킷을 보낼 대상 라우터를 변경시킨다.

 

 

공격자가 자신을 라우터인척 클라이언트에게 ICMP 리다이렉트 메시지를 발송하면

클라이언트는 공격자를 라우터로 인지하여 밖으로 빠져나가는 패킷을 공격자에게 보내게 된다.

 

따라서 클라이언트가 보내는 모든 데이터를 공격자가 볼 수 있게 되고,

확인한 다음 정상적인 경로로 다시 Relay해주기만 하면 클라이언트는 피해 사실을 깨닫기 어렵게 된다.

(단 이 경우 응답을 받을 때는 정상적인 경로로 다시 들어오기 때문에 공격자는 발신 데이터만 볼 수 있다)

 

스위치 기능을 마비시켜 허브처럼 동작하게 할 수도 있다.

 

스위치가 허브처럼 동작하지 않을 수 있는 이유는 맥 테이블을 참조하기 때문이다.

 

이를 통해 이미 알고 있는 맥 주소에 대해서는 ARP요청을 보낼 필요가 없고, 새로 추가되는 맥에 대해서는 맥테이블에 추가한다.

 

공격자는 스위치에 존재하지 않는 MAC주소로 데이터를 계속 보내면 맥 테이블에 데이터가 계속 추가되고,

결국 메모리가 꽉 차게 되면 스위치는 정상 작동할 수 없게 된다.

 

대부분의 스위치들은 이 경우 작동을 멈추는 대신 스위치의 기능을 포기하고 허브(모든 패킷이 네트워크의 모든 사람에게 전달)처럼 작동하게 한다.

 

공격에 성공하면 공격자는 단순히 프로미시큐어스 모드를 작동시켜 간단히 스니핑할 수 있다.

 

Sniffing 방어

1. 프로미시큐어스 모드에서는 모든 패킷을 받아들인다는 점에 착안하여,

네트워크에 존재하지 않는 가짜 MAC주소에 대해 ping을 보낸다.

 

프로미시큐어스가 아닌 정상적인 클라이언트는 이 ping을 무시하지만,

모든 패킷을 받아들이는 프로미스큐어스 모드인 시스템은 이 ping에 대해 응답한다.

 

따라서 이 시스템을 차단하거나 누구인지를 알아낼 수 있다.

 

2. 1번과 유사하게 ARP 프로토콜을 이용해서 네트워크에 존재하지 않는 MAC주소를 묻는다.

이 경우 정상적인 클라이언트들은 응답하지 않는데, 프로미시큐어스 모드인 시스템은 여기에도 응답한다.

 

3. 유인(Decoy)을 이용한다.

스니핑 목적은 정보의 탈취이다. 가짜 정보(ex: 관리자 아이디, 패스워드)를 일부러 흘리고 공격자를 찾는다.

 

4. ARP watch

ARP테이블이 변했을 때 관리자에게 알림을 보내는 서비스이다.

 

5. 데이터 암호화

스니핑하더라도 내용을 알아볼 수 없도록 HTTP대신 HTTPS를 사용하는 것 처럼 암호화 프로토콜을 사용한다.

 

Spoofing

속이는 행위.

 

스니핑(엿보기, 탈취)를 위해 스푸핑(속이기)를 한다.

 

Spoofing: ARP Spoofing

 

ARP 프로토콜을 이용하여 원하는 IP의 맥 주소를 공격자의 MAC주소로 변경하여 패킷이 공격자를 거치도록 한다.

 

ARP Spoofing은 MAC주소를 바꿔치기 하는 방법이므로, 동일 네트워크 상에서 사용이 가능하다.

 

예를 들어 네트워크 정보가 아래와 같다고 해보자.

 

ARP 테이블 IP MAC
시스템A 123.123.123.3 AA...
시스템B 123.123.123.2 BB...
공격자 123.123.123.1 CC...

 

이 때 시스템 A와 B가 통신을 한다고 가정할 때,

공격자가 시스템 A에게는 시스템 B의 MAC주소가 CC...(공격자의 MAC)이라고 알리고

시스템 B에게는 시스템A의 MAC주소가 CC...(공격자의 MAC)이라고 알린다.

(가짜 ARP Response를 A와 B에게 보내 ARP 테이블을 변경시킨다)

 

그렇다면 시스템A와 시스템 B의 ARP 테이블은 다음과 같아진다.

 

(시스템A)ARP 테이블 IP MAC
시스템A 123.123.123.3 AA...
시스템B 123.123.123.2 CC...
공격자 123.123.123.1 CC...

 

 

(시스템B)ARP 테이블 IP MAC
시스템A 123.123.123.3 CC...
시스템B 123.123.123.2 BB...
공격자 123.123.123.1 CC...

 

 

따라서 이제 시스템 A가 B에게 정보를 보낼 때 B가 아닌 공격자에게 데이터를 전송하게 되고,

시스템 B역시 마찬가지로 변경된다.

 

공격자는 패킷을 열어보고 원래 목적지로 Relay해주기만 하면 된다.

 

이는 ARP 프로토콜의 치명적인 단점으로, ARP Request 여부와 상관없이 ARP Response를 받으면 ARP Table을 갱신하기 때문이다.

 

방어를 위해서는 ARP 테이블을 정적 테이블로 변경시켜 임의로 변경되지 않게 하거나,

ARP Table이 변경되었을 때 알림이 가게 하여 관리자가 알아차릴 수 있게 하는 방법으로 방어할 수 있다.

 

Spoofing: IP Spoofing

src IP(송신자 IP)를 다른 IP로 속이는 방법이다.

 

트러스트 기반 연결에서(지정한 IP는 로그인을 요구하지 않음) IP Spoofing을 이용해 시스템에 침입할 수 있다.

 

rlogin 명령어에서 /etc/hosts.equiv 파일의 내용이 다음과 같다고 해보자.

 

200.200.200.200 root

201.201.201.201 +

 

이것은 rlogin으로 로그인할 때 200.200.200.200에서 root로 로그인할 때 계정을 요구하지 않고,

201.201.201.201에서 로그인할 때 모든 계정에 대해 계정을 요구하지 않는다는 뜻이다.

(+는 와일드카드로, 모든 케이스 허용)

 

클라이언트 A의 IP가 201.201.201.201이고 서버와 연결되어 있을 때,

공격자가 클라이언트에게 DoS공격을 가하고, 연결 재설정 과정에서 서버와 클라이언트 관계를 자신으로 설정하면

공격자가 계속해서 서버와 통신할 수 있게 된다.

 

rlogin 대신 ssh를 연결하는 등 트러스트 기반 연결을 사용하지 않는 방법으로 방어할 수 있다.

 

트러스트를 반드시 사용해야 한다면 MAC Table을 정적으로 설정한다.

 

Spoofing: DNS Spoofing

 

문자열 주소를 IP로 변환하여 접속하기 위해 DNS(Domain Name Service)를 사용한다.

 

DNS는 빠른 속도를 위해 UDP를 사용한다.

 

 

공격자가 미리 공격 대상에게 ARP Sniffing을 진행하고,

클라이언트(공격 대상)이 특정 주소에 대해 DNS Lookup(domain-> IP)요청을 보내면

공격자가 DNS Response로 자신의 아이피를 보낸다.

 

클라이언트는 정상적으로 도메인을 입력했음에도 공격자가 위조한 사이트로 접속된다.

 

대응책으로는 중요한 사이트에 대해 DNS정보를 미리 등록할 수 있다.

 

만약 www.asdf.com에 대해 미리 주소를 123.123.123.123처럼 등록해 둠으로써 

www.asdf.com  에 접속할 때 DNS Lookup 없이도 123.123.123.123과 통신할 수 있다.

 

세션 하이재킹 (Session Hijacking)

 

클라이언트와 서버 사이의 세션을 탈취하는 공격 방법이다.

 

스푸핑을 통해 클라이언트와 서버 사이의 패킷 흐름을 관찰한 후,

고의적으로 연결 재설정(Connection Reset; RST플래그 전송)을 일으킨다.

 

서버는 공격자와 다시 연결 재수립을 위해 3-way handshaking을 진행하고,

이후 공격자는 서버와 통신하면서 클라이언트가 보낸 정보도 Relay하여 하이재킹 사실을 알아차리기 어렵게 한다.

 

세션 하이재킹은 로그인과 같은 인증 과정은 클라이언트가 진행하고,

이후 연결된 세션을 탈취하므로 모든 인증을 우회할 수 있다.

 

방어를 위해 서버와 클라이언트 모두의 MAC Table을 정적으로 변경하고, 

통신에 암호화 프로토콜을 사용할 수 있다.



Comments