방화벽(Firewall)
외부에서 내부로 많은 패킷이 이동하는데, 이때 위험하거나 이상한 패킷이 들어올 수도 있다. 사설 네트워크에서 데이터를 받을 때, 일부 패킷은 통과시키고 다른 패킷을 차단시키는 기능을 방화벽이라고 한다.
이러한 방화벽은 안전한 시스템을 구축하기 위한 목적이다.
Firewalls: why
이러한 방화벽은 왜 도입되었을까?
- 서비스 거부 공격 방지
SYN flooding는 TCP 연결 시 사용되는 SYN 신호를 이용하여 공격하는 방법이다. TCP에서 SYN 신호는 TCP 연결을 생성하겠다는 의미이기 때문에 SYN 하나 당 소켓을 하나씩 사용하게 된다. 따라서 SYN 신호를 계속 전송하여 TCP 연결 요청이 많이 오게 되면 그 서버가 죽을 수도 있다.
지금은 이러한 공격은 운영체제 차원에서 막는데, SYN 신호만 계속해서 전송하면 자체적으로 해당 포트를 차단한다.
- 내부 데이터에 대한 불법적인 수정/접근 방지
대표적으로 홈페이지 위조 공격이 있는데, url에 위조/변조 공격이 가능하다.
예를 들어 네이버 홈페이지를 다른 것으로 대체하는 등의 공격이다.
- 내부 네트워크에는 승인된 접근만 허용
지정한 ip 주소에 대해서만 접근을 지정할 수 있다.
- 세 가지 타입의 방화벽
모니터링 대상의 상태를 기억해야 하는 여부에 따라 종류가 나뉜다. 상태를 기억해야 하는 경우 상태 테이블을 생성해야 하므로 복잡하다. 상태를 기억하지 않는 경우 포트번호만 차단하는 등의 방법을 사용할 수 있다. 또한 url을 통해 연결되는 리다이렉션을 바꿔줄 수도 있다.
각 종류는 stateless packet filters, stateful packet filters, application gateways이다.
Stateless packet filtering
패킷에 대한 상태 정보가 없는 방법으로 보통은 포트 번호로 접속을 차단한다. 따라서 상대적으로 허용하는 패킷의 범위가 크다.
예를 들어보자.
1. UDP가 자주 오고가는 포트인 17번과 telnet이 자주 쓰는 23번 포트를 차단
결과: 들어오고 나가는 모든 UDP 흐름과 telnet 연결이 차단된다.
telnet은 로컬 네트워크 내에서 직접 연결된 것처럼 원격 컴퓨터에 로그인하여 사용할 수 있는 프로토콜이다. 이 telnet은 악용하여 사용할 수 있으므로 telnet이 자주 사용하는 포트인 23번 포트를 차단할 수 있다. 이를 통해 브루트포스 방법으로 id와 pw를 알아내는 공격을 막을 수 있다?
2. inbound 패킷 중 ack가 0인 것을 차단
결과: 외부 클라이언트가 내부 클라이언트와 TCP 연결을 하는 것을 방지하지만 내부 클라이언트는 외부에 연결하도록 허용한다.
ack 신호가 0인 경우 공격 패킷이라고 판단할 수 있다. 따라서 TCP 헤더의 flag 부분에서 ack를 서칭한 후, 0이면 해당 패킷이 들어오지 못하게 막는다.
more examples
위의 두 번째 예시와 같이 특정 헤더 필드 정보로 패킷을 막을 수 있다.
이러한 방법은 상태 정보 없이도 적용이 가능하므로 Stateless packet filtering에서 주로 사용한다.
Access Control Lists(ACL)
접근 제어 리스트(ACL)은 (접근 정보, ip 주소, 프로토콜, 포트번호, flag)의 5개의 튜플로 구성되어 있다.
해당 튜플 값을 통해 막을 패킷에 대한 조건을 설정하는데 이것이 일반적인 방화벽 정책이다.
Stateful packet filtering
Stateful packet filtering은 패킷에 대한 상태 정보를 저장하기 때문에 조금 더 복잡하다.
TCP 연결의 상태를 탐지하여 SYN이나 FIN을 확인하여 특정 조건을 만족하는 경우만 패킷만 수신한다.
예를 들어 80 포트는 보통 웹 서버로부터 입력이 들어온다. 웹 서버는 SYN, SYNACK와 같은 핸드쉐이크 과정으로 연결을 생성/종료한다. 따라서 핸드쉐이크의 과정이 없는데, 80포트에서 ack 신호가 들어오는 경우는 비정상이다. 이러한 경우는 상태를 저장하지 않은 경우에 알아차리기 어렵다. 따라서 SYN, FIN과 같은 상태 정보를 기억해야 한다.
Stateful packet filtering의 ACL은 사진과 같이 check connection 튜플이 추가되어 현재 연결 상태를 함께 저장한다.
공유기, 방화벽
iptables –nL -v
위 명령어를 통해 실제 공유기의 iptable을 확인할 수 있다.
target 부분을 통해 패킷의 수신 여부를 확인할 수 있다.
디폴트값은 denied으로 허용하는 특정 포트만 개방할 수 있도록 한다.
일반적인 방화벽은 리눅스 ip table로 구현한다.
iptables -nL -t nat -v
공유기 내부에서 웹 서버를 만들고, 외부에서 접근하기 위해 우리는 포트포워딩이라는 기능을 사용해야 한다. 이 내용을 보기 위해서는 nat 테이블의 공유기 정보를 확인할 수 있다. 위 사진에서 아래 VSERVER에서 포트포워딩 정보를 확인할 수 있다.
가장 마지막 줄을 해석하자면, 외부에서 8888 포트로 들어온 패킷은 '192.168.1.8:3389'로 포트포워딩된다는 뜻이다.
이 기능은 일반적인 방화벽의 공유기가 제공하는 기본적인 포트포워딩 기능이다.
sudo ufw status
방화벽은 운영체제마다 사용하는 테이블이 다르다. 대부분은 기본적으로 리눅스 ip 테이블을 사용하지만 우분투에서 기본적으로 제공하는 디폴트 방화벽으로 ufw가 있다.
위 사진에서는 8000번 포트가 ALLOW되고 있다. source 또한 지정할 수 있는데, 위 경우에는 8000번 포트의 source는 168.188.0.0./16이다. subnet처럼 범위를 지정해 줄 수 있다.
Application gateways
ip와 같이 운영체제 단계 말고도 응용으로 가능하다. 이를 Application gateways라고 한다. 어플리케이션 데이터와 IP/TCP/UDP 필드에서 패킷을 필터링할 수 있다. 여기에는 로드밸런스와 같은 기능도 추가될 수 있다.
url을 통해 redirection이 가능한데, 이전까지는 별도의 시스템 데이터에 접근하기 위해서는 ip와 포트번호를 사용하였지만, Application gateways가 포워딩하여 서버쪽으로의 전달을 대신할 수 있다.
예를 들어보자.
1. 모든 텔넷 사용자는 gateway를 통해 telnet을 사용하도록 요구한다.
2. 승인된 사용자의 경우 gateway는 대상 호스트에 대한 telnet 연결을 설정한다.
- gateway는 2개의 연결 간에 데이터를 중계
3. 라우터 필터는 gateway에서 시작되지 않는 모든 telnet 연결을 차단한다.
Limitations of firewalls, gateways
방화벽과 게이트웨이의 한계에 대해 알아보자.
- IP spoofing
IP spoofing은 공격을 위해 송신자의 ip를 숨기거나, 다른 ip 주소를 위조하는 등의 소스 주소가 수정된 IP 패킷을 생성하는 것이다.
방화벽은 ip spoofing을 막을 수 없다.
또한 웹 서버 등은 gateway를 통해 접속해야 하므로 중간에 장애가 발생하면 성능이 떨어질 수도 있다. 즉, 시스템이 복잡하면 성능 상의 문제가 발생할 수 있다.
Intrusion detection systems
현재 방화벽은 주소와 포트번호로만 패킷을 차단한다. 하지만 현재는 패킷의 payload까지 분석하는 방법이 존재하는데, 이 방법을 Intrusion detection systems(IDS)라고 한다.
deep packet inspection를 통해 패킷의 payload를 확인할 수 있다. IPSec는 기본적으로 tunnel mode이므로 중간 라우터에서 키를 가지고 있어 복호화가 가능하다.
이러한 IDS는 회사 방침상 필요한 경우가 있다.
현재는 네트워크가 복잡하여 방화벽이 필수다. 특히, IDS는 DDos 공격을 방어하기 위하여 꼭 필요하다.
참고 및 출처
https://www.ibm.com/docs/ko/i/7.3?topic=services-telnet
https://www.cloudflare.com/ko-kr/learning/ddos/glossary/ip-spoofing/
'Computer Science > 컴퓨터네트워크(ComNet)' 카테고리의 다른 글
[컴네/CN] Nodejs (0) | 2023.12.10 |
---|---|
[컴네/CN] Multimedia (0) | 2023.12.10 |
[컴네/CN] 암호통신: IPSec (0) | 2023.12.09 |
[컴네/CN] 암호통신: 이메일 (0) | 2023.12.09 |
[컴네/CN] 암호통신: 무결성 (1) | 2023.12.09 |