야간 보안 공부
2018년 12월 24일
상황 3반
[목 차]
1. NAT(Network Address Translation)
1.1 NAT 등장배경
1.2 NAT란?
1.2.1 NAT 기능
1.2.2 장점
1.2.3 단점
1.3 통신 원리
1.3.1 NAT 통신 원리
1.3.2 NAPT 통신 원리
1.4 결론
1. NAT(Network Address Translation, 네트워크 주소 변환)
1.1 NAT 등장배경
[그림 1] NAT
IP 주소를 처음 만들 때 32비트만을 사용하도록 한 결정은 요즘 시대에 IP 고갈이라는 문제를 야기했다. 그래서 개발하고 적용하고 있는 IPv6 버전이다. NAT는 이러한 IP 주소 고갈 문제를 줄이기 위해 고안된 것으로서 IPv6가 일상적으로 지원되기 전까지 IPv4 IP주소의 사용기간을 좀 더 연장시키는 역할을 했다.
1.2 NAT란 무엇인가?
NAT는 사설 IP를 사용하는 내부 네트워크에서 공인 IP로 IP 주소를 변환하는 것이다. NAT는 라우터의 일부로서 포함되기도 하고, 종종 방화벽의 일부가 되기도 한다. NAT를 사용하는 이유는 여러 대의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위한 경우가 대부분이다. 예시로, 우리가 인터넷 회선을 하나 개통하고 공유기를 달아서 여러 PC를 연결하여 사용하는데, 이것이 가능한 이유가 바로 인터넷 공유기에 NAT 기능이 탑재되어있기 때문이다.
방화벽의 일부로 사용되는 이유는 다음과 같다. 보통 중요한 자료가 들어있는 서버를 외부에 공개하지 않기 위해 중간에 방화벽을 두어서 보호하게 된다. 하지만, 방화벽 내부의 컴퓨터는 인터넷에 접속할 수 있어야하므로, 방화벽에 NAT 기능을 탑재하여 내부 컴퓨터가 외부로 통신이 가능하도록 한다.
1.2.1 NAT 기능
NAT의 기능에는 여러 가지가 있다.
첫 번째, 사설 네트워크에서 사용하는 사설 IP들을 하나 또는 그 이상의 공인 IP로 변환하여 외부 인터넷에 접속할 수 있다.
[그림 2] IP 변환
NAT의 IP 변환 기능을 이용하여, 사설 네트워크에서 사용하는 여러 개의 호스트가 하나의 공인 IP 주소를 사용하여, 여러 명이 동시에 인터넷에 접속할 수 있게 된다. 이를 통해, 회사에서 필요한 공인 IP 주소의 개수를 보존할 수 있다.
두 번째, NAT 사용으로 인한 보안 강화. 사설망은 특별한 설정을 해주지 않는 이상 외부망에서 사설망 내부 PC로의 접근이 불가능한 구조로 되어있다. 따라서 네트워크를 통한 공격에 안전해진다.
1.2.2 장점
1) 공인 IP 주소 공유 : 대량의 호스트가 소수의 공인 IP주소를 공유할 수 있다.
2) 확장의 용이함 : 로컬 네트워크 장비는 사설 주소를 이용하고 공인 IP주소를 필요로 하지 않기 때문에, 로컬 네트워크에 새 장비를 추가하는 것이 쉽다.
3) 로컬 통제력 강화 : 사설 네트워크이기 때문에 관리자는 관리를 쉽게 할 수 있다.
4) ISP 선택의 유연성 : ISP를 변경하는 것이 용이하다. 공인 IP만 바꾸면 되기 때문이다.
5) 보안 강화 : 간접 계층을 추가하는 것이기 때문에, 외부 공격자는 내부 클라이언트를 직접 접근하여 공격하기 어렵다
※ ISP(Internet Service Provider)란?
- 개인이나 회사에게 인터넷 접속 서비스, 웹 사이트 개설 및 웹 호스팅 서비스 등을 제공하는 회사 즉, ‘인터넷 회사’들을 말한다. 인터넷에 연결된 전용회선을 통하여 일반 사용자들이 전자 우편, 정보 검색, 파일 전송 등 다양한 서비스를 이용할 수 있게 해주는 서비스를 제공하는 업체이다. (ex, KT, LG 유플러스, SK브로드밴드 등)
1.2.3 단점
1) 복잡성 : NAT는 추가적인 시스템이기 때문에 복잡성을 증가시킨다. 주소 변환 때문에 네트워크 해결하는 것을 좀 더 복잡하게 만든다.
2) 공인 주소 부족 : 클라이언트 호스트엔 공인 IP주소가 없기 때문에 일부 애플리케이션 기능을 수행하지 못할 수도 있다.
3) 특정 애플리케이션과의 호환성 문제 : NAT는 IP헤더 필드만을 수정하고, 데이터 영역은 수정하지 않기 때문에 특정 애플리케이션에 호환성 문제를 야기 시킬 수 있다.
4) 보안 프로토콜 문제 : IPsec와 같은 프로토콜은 헤더의 변조를 탐지하도록 설계했기 때문에 NAT에 의한 변경과 악성 데이터 그램 해킹을 오탐 할 수 있다.
5) 클라이언트 접근 지원 미비 : 클라이언트 호스트는 공인 IP가 없다고 말했다. 때문에 악성 공격자로부터 보호는 가능하지만 네트워크 클라이언트로 정당하게 접근하는 것도 어렵다는 것을 의미한다. 피어투피어(peer-to-peer)애플리케이션을 설정하는 것은 어려운 일이며, 기관의 웹사이트는 보통 NAT없이 구성되는 경우가 많다.
6) 성능 감소 : 데이터 그램이 사설 네트워크와 인터넷을 오갈 때마다 주소 변환이 필요하다. 덧붙여, 헤더 체크섬을 다시 계산하는 것과 같은 추가 작업도 이뤄져야 한다. 각 주소 변환은 작은 일이지만, 모든 데이터 그램에 적용하면 네트워크 지연에 영향을 주게 된다.
※ 체크섬(Checksum)이란?
- 네트워크를 통해서 전송된 데이터의 값이 변경되었는지(무결성)를 검사하는 값입니다. 무결성을 통해서 네트워크를 통해서 수신된 데이터에 오류가 없는지 여부를 확인한다.
1.3 통신 원리
NAT에서의 통신 원리는 RE: 제로부터 시작하는 블로그 생활의 5kyc1ad님의 내용을 복사하였다.
링크 : https://5kyc1ad.tistory.com/254#comment12528613
1.3.1 NAT 통신 원리
사설망에서 외부망으로 통신을 시도하면 해당 패킷은 무조건 공유기를 거치게 되어 있다. 여기서는 의미상 게이트웨이라고 하겠다. 당연하게도 처음 발신자가 게이트웨이에게 패킷을 전달했을 때 '보내는 사람의 IP'를 나타내는 SRC_IP는 사설망 내부의 발신자 주소로 채워져 있다. 하지만 만약에 이것이 그대로 전달될 경우, 수신자가 응답하는 상대의 주소는 사설망 내부의 IP가 되므로 전 세계의 수많은 사설망 중 어디로 보내야 할지 알 수가 없게 된다. 이런 이유 때문에 외부에서 사설망으로의 접근이 불가능하여 NAT가 보안이 뛰어나다는 장점도 있다.
[그림 3] 게이트 웨이로 패킷 전송
통신을 위해 게이트웨이는 패킷을 받아서 패킷 안의 IP주소를 자신의 공인IP로 임의 수정하여 목적지로 발신한다.
패킷을 받은 수신자는 목적지 IP 주소에 게이트웨이가 집어넣은 공인IP를 넣어서 패킷을 발신할 것이고, 해당 패킷은 게이트웨이에게 도달하게 될 것이다.
[그림 4] NAT 패킷 전달 과정
게이트웨이가 발신자의 IP를 수정하여 발신할 때 게이트웨이는 내부에 갖고 있는 테이블에 이를 기록해 둔다. 어떤 주소에서 어떤 주소로, 무슨 프로토콜을 사용하여 발신했는지를 기록한 후, 응답 패킷이 되돌아오면 그 값을 찾아서 해당하는 사설망 기기에게 발신하는 것이다. 이렇게 테이블을 만들어서 저장해놓고 찾아가는 방법으로 이 문제를 해결할 수는 있지만 문제가 한 가지 더 생길 수 있다. 이는 다음에 설명할 NAPT에서 해결된다.
1.3.2 NAPT 통신 원리
[그림 5] 다수의 접속 요청
NAT의 통신 방식은 큰 문제가 하나 있다. 바로 여러 개의 사설망 내의 기기가 동시에 같은 외부망 주소로 접속을 요청하는 경우이다. 원래라면 요청한 곳의 주소와 포트를 보고 해당하는 사설망 주소를 찾아서 보내주어야 하는데, 해당하는 주소가 여러 개일 경우 중복되므로 이를 처리할 방법이 없는 것이다.
이를 해결하기 위해 만들어진 것이 NAPT이다.
[그림 6] NAPT 패킷 전달 과정
NAPT는 Network Address Port Translation의 약자로, NAT에서는 발신자의 사설망-외부망 IP를 바꿔서 보내주는 역할만을 수행했다면 이제는 포트까지 바꿔서 보내는 역할을 한다. 이러면서 NAPT의 테이블은 NAT의 테이블에서 Port에 해당하는 컬럼이 추가된다. 이렇게 변경한 결과 게이트웨이는 발신자의 포트 번호를 보고도 구별할 수 있게 되었다. 만약 발신자의 포트 번호까지 같게 패킷이 보내지면 어떻게 되느냐고도 할 수 있는데, 그럴 경우에는 위 그림처럼 Private Port를 임의의 SRC 포트로 바꿔서 보내면 되므로 아무런 문제가 없다.
[참고 문헌]
[1] https://5kyc1ad.tistory.com/254
[2] http://rednooby.tistory.com/25
[3] https://goodgid.github.io/NW-NAT/
'Security > Study' 카테고리의 다른 글
181226 공부일지 (1) | 2018.12.26 |
---|---|
2018.12.20 야간 보안 공부 - VPN (0) | 2018.12.21 |
181217 공부일지 (0) | 2018.12.18 |
2018.12.16 야간 보안 공부(미완성) - SQL 인젝션 (0) | 2018.12.15 |
181205 공부일지 (0) | 2018.12.05 |