본문 바로가기
  • 시 쓰는 개발자
CS 개념/컴퓨터 보안

컴퓨터 보안 (7) - Network Security 2

by poetDeveloper 2024. 6. 6.

시험공부하며 러프하게 정리한 내용이니, 가볍게 참고만 하시길

 

🥕6장 네트워크 보안 2

>> 용어 정리
- MAC : 기기를 구분할 수 있는 주소
- ARP : IP와 MAC을 연결하는 프로토콜
- IP : bess-effort
- ICMP : 네트워크 핑 체크함. 브로트캐스트에 핑 보내서 네트워크 과부화 공격도 가능
- Traceback : 어디서부터 공격 시작됐나 알아보는 방법
- Syn flood : 요청 하고서 대답을 기다리는 걸 이용해서 관심도 없는데 syn만 엄청 보내서 대기타다가 네트워크 다운
- Optimistic 공격 : ack 안왔는데 왔다고 착각하게 만듦. 통신 잘되고있는줄 알고 패킷 더 늘려서 나중엔 다운됨

>> IP spoofing : 다른 사람의 IP 훔쳐서 내거라고 속이는 공격
1. Blind spoofing : 지금까지의 통신 안보고서 눈가린채 얻어걸려라 공격. 패킷 가로채려면 ack나 syn 넘버를 찍어서 맞춰야함.

2. Non blind spoofing : 오가는 패킷을 보면서 공격. 패턴보면서 분석하다가 패턴 보이면 공격함
패킷 가로채서 디코딩해 분석하고, 패턴 확인하고서 실제 클라이언트와 유사한 IP써서 서버로 메세지 보냄

>> 패킷 스니퍼 : 네트워크 오가는 정보 가로채서 읽음. 이것 자체는 합법임.(네트워크 상태를 체크할 수도 있으니까)
- 스니퍼는 스위치 허브의 서브넷에 있어야 함.
- ARP cache 중독 : ARP 캐시는 IP주소와 MAC 주소 사이의 연관성을 저장해두는 캐시임. 여기에 공격자 정보를 넣어서 정보가 나한테 오게 만드는 것을 말함.
- 패킷 스니퍼는 SW/HW 둘다 가능
- 데이터 가로채려고 어떤 입력을 하는 게 아니라서 수동적이고 탐지가 어려움.
- 해결법
1) ping : broadcast로 핑 보내서 반응하는 애들 관찰
2) ARP watch : ARP 캐시에 중복이 발생하면 알람 울림. 물론, 실제로 IP주소에 MAC이 2개 연결될 수도 있어서 허위 알람이 될 수도 있음. (DHCP는 단일 머신에 여러 주소 가짐)
3) SSH로 패킷 암호화
4) 방화벽 강화

>> Pork knocking : 특정 패턴으로 포트에 연결을 시도하면 열어줌.
- replay attack : 패턴 지켜보다가 그대로 따라함
--->>> 이거 막기 위해 패턴을 시간별로 바꾸고, 열어주는 포트도 랜덤화함.
- 패턴 조합이 65536^K개라서 (K=노크한 포트 수) 브루트 포스에 대해 안전하다.

>> UDP : 전달보장X, 빠름(전화, 비디오, 라이브 스트리밍 등)
- 동시에 들어오는 여러 application 데이터를 구분할 수 있음.
- 데이터 잃어버릴 각오 해야함. 안정성 X
- TFTP : application 계층에서 TFTP라는 프로토콜 써서 UDP를 써도 전달보장하게 만들어줄 수 있음. (TFTP가 전달 안된거 보내달라고 재요청함)
- UDP도 혼잡함 있음. congestion control 없고 ack를 안보내니까 Optimistic 공격도 안통함. 근데 UDP 네트워크 접근 많으면 혼잡해질 수 있음. 

>> NAT - Network Address Translation : 외부IP(공용) -> NAT -> 내부IP(사설)
- 외부에서 소스와 destination 보내주면 내부용 IP로 바꿔서 전달해줌. 내부 IP를 밖에 노출하지 않게 됨.
- 내부와 외부 사이에 라우터 배치하는 것.
- 모든 터미널에 전세계적으로 유니크한 IP주소가 필요한 건 아님. 조직적으로만 고유하면 된다. 그래서 NAT 쓰면 IP 주소 공간 아낄 수 있음.
- 다만, 여러 서비스가 실제 사용자의 IP주소로 동작하다보니 NAT가 완전히 투명하게 동작하기 어렵다.
----------------------------------------------------------------------------------------
>> DNS : 이름을 IP 주소에 매핑하는 프로토콜, 애플리케이션 계층에 있음. 분산 DB 제공
- 다양한 리소스 레코드
1) 주소 레코드 : 호스트 이름과 IP주소 연결
2) 메일 교환 레코드 : 이메일 치면 IP연결
3) 네임 서버 레코드 : 도메인 권한이 있는 레코드
- Rightmost label 따름. 맨 오른쪽부터 상위 ex) abc.co.kr = korea, company, abc
- TLD는 잘 안변함
- DNS resolver가 root갔다가, com서버 갔다가, 여기서 캐시 안해놨으면 로컬서버 갔고 캐시돼있으면 바로 줌
- DNS 쿼리는  일반적으로 포트 53의 UDP를 통해 실행됨. (내부에 16비트 request 식별자 있음.)

>> ICANN : 인터넷 주소 자원 관리 기구. 어떤 서버에게 어떤 IP가 할당된다는 걸 관리하는 기구.
- DNS 관리에 대한 전반적인 책임이 있음.

>> 주소 찾아오기
- zone : 동일한 권한을 가진 연결된 노드들의 모임
- 캐시되어있으면 딱 거기까지만 가고 돌아오면 됨.
- recursive : A는 B에게 찾아와라, B는 C에게 찾아와라, C가 찾으면 B에게 전달, B는 A에게 전달
- iterative   : A가 직접 주소 찾으러 다님. root갔다가 없으면 나오고, com 갔다가 local 갔다가 .... 

>> Authoritative Name Server(권한 있는 name server) - ANSs : 특정 도메인은 네가 담당해라
- Master-slave 가능 (상위 하위 계층을 의미)

>> Dynamic Resolution : 비슷한 위치에선 근처 가까운 유저가 알려주게 함.
- IP 주소를 토대로 위치 추적이 가능해야함.

>> DNS 하이재킹 : 서버와 연결된 주소 바꿔치기 or 캐시된 정보 변조
- 똑같이 생겼는데 다른 IP를 가진 사이트임. naver 쳐서 1234 ip 연결되어야하는데 조작된 9999 ip 연결됨
- 도메인에 다른 IP 연결해서 id, pwd 등 민감정보 빼감

>> DNS cache 중독 : DNS 서버 감염돼서 도메인 요청시 악의적인 사이트로 연결되게 서버 자체가 맛이 감.
- DNS 서버가 잘못된 주소를 캐싱하게 만듦.
- 캐시 중독되는 상황
1) 네임서버가 식별자 무시
2) 네임서버가 예측 가능한 id 사용
3) 네임서버가 원하지 않는 레코드 받아들일 때
- 해결책
1) 쿼리에 랜덤 식별자 적용
2) 항상 식별자 확인
3) 포트 할당 무작위화
4) DNSSEC 사용하기

>> DNSSEC : 해당 IP 주소 맞다고 보장해주는 일종의 서명
- 무결성 있는 답변해줌.
- 공개키 암호화 써서 서명함
- 페이지가 없다고 떠도 진짜 없어서 없다고 뜨는지, 아니면 숨기는 건지 확인해줌. (존재부인 진위여부 판단)
- ip 주소 요청시, PK같은 서명을 함께 넘겨주면 이 서명 보고 해당 ip가 맞다고 보장해줌.
----------------------------------------------------------------------------------------
>> 방화벽 : 보통 private과 public을 구분하기 위해 사용
- 방화벽 action
1) Accepted : 통과
2) Dropped  : 통과X, 이유 안알려줌 걍 거절
3) Rejected  : 통과X, 이유 알려줌
- 방화벽 실행 기준 : 그때그때 다름. 특정 ip, port, protocol, 바이러스 포함 여부 등 기준에 따라 차단함.
- 블랙리스트    : 블랙리스트만 거르고 다 통과
- 화이트리스트 : 화이트리스트만 통과시키고 다 거름. 화이트리스트가 더 엄격한 방화벽임. 그래서 제대로된 통신인데도 화이트리스트에 등록 안했으면 막힐 수 있음.
- 방화벽 타입 3가지
1) stateless 필터 : 패킷 하나하나 다 보면서 통과시킬지 판단
기록을 안하니까 부하는 적은데 세분화된 통과는 못함. 각 패킷 자체만 보며 전후사정 안보고 개별처리함. 매우 제한적이기 때문에 대부분의 공격 방지함.
ex) port 80으로 가는 SYN만 통과시켜, 그냥 SYN만 보내면 drop시켜 ... 등
2) stateful 필터 : 패킷의 상태를 봄. 시작 패킷인지, 유효한 패킷인지 보면서 판단.
패킷 1개가 아니라 table 형태로 어떤 패킷 오가는지 적어놓고 결정함.
ex) A에 대한 response로 오는 패킷은 통과시켜, 특정 ip만 통과시켜
3) application layer : 더 자세히 패킷을 봄. 어떤 애플리케이션의 패킷인지 볼 수 있음. 자세히 보니까 부하 증가함

>> 터널 : TCP는 암호화 안해서 중간에서 정보 볼 수 있으니 이거 방지하려고 터널로 암호화함.
- 인터넷을 통한 패킷은 자동 암호화됨.
- SSH (secure shell) : 안전한 명령형 세션임
ssh 쓰는 과정
1) 클라이언트가 TCP로 서버에 연결
2) 클라-서버 사이에 어떤 암호화, 어떤 프로토콜 등 정보 사전에 약속함
3) 클라, 서버만 아는 비밀 키 생성, 이거 교환해서 통신을 암호화하는데 사용됨. 보통 키는 블록 암호(AES, 3DES)로 사용
4) 비밀키 공유방법 : 비밀번호 쓰거나, 비대칭키 사용, 비밀키로만 풀 수 있는 챌린지를 전달하고 클라이언트가 잘 풀면 신원 인증됨
5) 인증 성공하면 서버는 클라이언트의 접근을 허용함

>> IPSec : 패킷 내용 기밀성과 내용 무결정 보장
- transport mode(내용 무결성 보장) : payload만 보호함. 소스, 목적지는 암호화 안해서 보거나 바뀔 수 있음.
- tunnel mode    (내용 & 주소 무결성 보장) : 패킷 자체를 암호화해서 payload, 주소 다 못봄. 그래서 새로운 ip주소를 할당하는데 이 주소는 목적주소 아니고 믿을만한 서버의 주소임. 이 서버로 보내고 거기서 처리하게 만듦.

>> VPN : 출장가서 인터넷같은 공용 네트워크로 회사(사설) 네트워크에 접근할 수 있게 해주는 기술
- public 환경에서 마치 private 환경에서 통신하듯이 만들어줌
- 신뢰할 수 없는 네트워크 환경에서조차 데이터 기밀성, 무결성, 인증을 보장해줌.
- remote access VPN : 인트라넷이라고 불리고, 출장가서 회사 내부망 접속할 때임.
이때 NAS라는 VPN의 엔드포인트를 설정함. NAS는 믿을만한 서버를 의미, 일종의 터널임. 내가 외부에서 NAS로 데이터 보내면, NAS가 어디 서버로 보내는지 숨긴 채로 전송함. 나는 NAS로만 데이터 보내면 됨. 외부에서 NAS 서버 주소 알아도, 어디로 보내는지 모름. (유드림스로 보내는지, 성적입력을 하는건지...)
- Site-to-Site VPN : 물리적으로 멀리 떨어져있는 회사A -> 회사B로 보낼 때 사용.
A ↔ routerA ↔ 터널 ↔ routerB ↔ B
- VPN 안쓸 땐 비싼 임대 회선 구입해서 인트라넷을 케이블로 직접 연결해야했음.