📋 배포 1단계 퀴즈 답
2021-05-01글
브라우저에서 google.com를 요청할 때 통신 과정이 어떻게 이루어질까요?
1. 주소창에 google.com를 입력하고 Enter를 누른다.
2. 웹 브라우저가 다음과 같은 구문으로 URL을 해석한다.
scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]
- scheme : 접근할 방법을 정의해 둔 프로토콜 이름
- 프로토콜 구분자인
:
와, IP 혹은 도메인 네임 정보가 필요한 프로토콜이면 // - 프로코콜마다 특화된 정보
3. URL이 문법에 맞으면 Host 부분을 인코딩한다.
4. HSTS (HTTP Strict Transport Sercurity) 목록을 로드해서 확인한다.
있으면 첫 요청을 HTTPS, 없으면 HTTP
5. DNS를 조회한다.
1) 우선, 로컬의 DNS Cache를 확인한다.
2) /etc/hosts 파일에 정적으로 설정한 정보를 확인한다.
3) /etc/resolv.conf에 설정한 정보를 기반으로 DNS 서버에게 질의한다.
4) DNS 서버는 정보가 있으면 반환하고 없으면 본인의 상위 DNS에게 질의를 하여 정보를 알아온다.
5) 도메인에 해당하는 IP를 알게되면 DNS Cache에 추가한다.
6. ARP(Address Resolution Protocol)로 대상의 IP와 MAC 주소를 알아낸다.
실질적인 통신을 하기 위해서는 논리 주소인 IP주소를 물리 주소인 MAC 주소로 변환해야 한다.
해당 네트워크 내에서 ARP를 브로드 캐스팅하고, 해당 IP주소를 가지고 있는 노드는 자신의 MAC 주소를 응답한다.
7. 대상과 TCP 통신을 통해 Socket을 연다.
1) 브라우저가 대상 서버의 IP 주소를 받으면 URL에서 해당 포트 번호를 가져와서, TCP Socket stream 요청
2) TCP segment가 만들어지는 Transport Layer로 전달. target port는 header에 추가되고 source port는 시스템에서 동적 포트 범위내에서 임의 지정
3) TCP segment를 Network Layer로 전달. segment header에 대상 컴퓨터의 IP주소와 현재 컴퓨터의 IP주소가 삽입된 packet 구성
4) packet이 DataLink Layer로 전달. 시스템의 MAC address와 gateway(local router)의 MAC주소를 포함하는 Frame header 추가 (gateway의 MAC address를 모르는경우 ARP를 이용해 찾아야 한다.)
5) packet이 ethernet, Wifi, Cellular data network 중 하나로 전송
6) packet local subnet router 도착, AS(Autonomous System)경계 router들을 통과
7) TCP 소켓 통신
8. HTTP 프로토콜로 요청하고 응답한다.
1) 요청/응답을 처리하는 서버인 HTTPD가 요청을 수신하고, URL에 해당하는 서버에 구성된 가상 호스트가 있는지 확인한다.
2) 서버는 해당 HTTP 메서드 요청을 수락할 수 있는지 확인한다.
3) 서버는 클라이언트가 IP, 인증 등을 통해 이 메서드를 사용할 수 있는지 확인한다.
4) 서버가 요청에 해당하는 콘텐츠를 가져온다.
5) 서버는 핸들러에 따라 파일 확장자를 분석한다.
9. 웹 브라우저가 그린다.
참고 자료
DDoS 공격에는 어떻게 대응하면 좋을까요?
UDP Flood 공격
- DDoS 공격 형태 중 가장 많이 사용되는 오래된 공격 형태
- 정상적인 사용자가 서버를 사용할 수 없도록 서버의 리소스를 소비하기 위해, 공격자가 피해자 시스템에 TCP(SYN) 연결 요청을 연속해서 전송 할 때 발생
- 서버가 SYN 연결 요 청 을 받 으 면 , 클라이언트가 연결을 확인하기 위해 보내는 응답신호(ACK)를 기다리는 위해 통신을 열린 상태로 유지하지만, SYN Flood는 응답 신호를 보내지 않으므로 설정된 연결 시간이 초과 될 때까지 서버의 리소스를 소비
- 피해자 서버가 정상적인 사용자에 대한 연결이 불가능한 서비스 장애
대응 방안
- 네트워크 로그를 조사하고 TCPSYNflag를 찾는다. (TCPdump 또는 Wireshark등의 패킷 분석 Tool이용)
- 방화벽 장비의 “SYN쿠키” 기능을 사용하여 SYNFlood의 영향을 완화 (트래픽이 서버에 전달되기 전에 방화벽이 클라이언트와 서버 간의 TCP연결을 확인)
SYN Flood
- SYN Flood 와 매우 유사
- 공격자가 봇넷을 사용하여 공격 대상 서버로 상당히 크고 많은 양의 트래픽을 전송
- 상대적으로 훨씬 빠르며 서버 리소스를 소모하지 않고, 서버의 네트워크 환경에서 사용 가능한 모든 대역폭을 소비비하여 정상적인 사용자에 대한 접근을 막는다.
- 네트워크 포트 중 UDP 패킷(예: 50555 포트)을 수신하는 서버가 해당 포트를 오픈하고 수신 대기하는 응용 프로그램이 작동하기 때문
- 공격하는 동안 크고 많은 수의 UDP 패킷이 전송되며 대부분의 서버에서 응답하기에 빠르게 모든 사용 가능한 공격 대상 대역폭을 잠식
대응 방안
- 네트워크 로그를 조사하고 많은 수의 원본 IP 주소에서 오는 불규칙한 네트워크 포트의 통신 요청을 통해 공격 UDP 패킷을 찾는다.
- 방화벽과 같은 주변 네트워크 장치에 대한 보안 규칙을 정의하여 필요한 포트에서만 인바운드 트래픽을 허용
ICMPFlood
- 공격자가 봇넷을 사용하여 사용 가능한 모든 대역폭을 소비하고 정상적인 사용자의 접근을 막기 위해 많은 수의 ICMP 패킷을 공격 대상 서버로 전송
- 대량의 ICMP 트래픽을 공격 대상 네트워크의 사용 가능한 모든 대역폭을 잠식할 수 있는 충분한 ICMP 요청 및 응답 트래픽 발생이 가능해야 한다.
대응 방안
- 많은 사용자로부터 요청되는 인바운드 ICMP트래픽을 네트워크 로그에서 조사
- 라우터와 같은 네트워크 경계 장치에 ICMP 트래픽의 임계치를 설정
HTTPFlood
- 공격자가 공격 대상 웹사이트에 대한 지속적인 많은 양의 HTTP GET 요청을 통해 웹서버의 리소스를 소진하게 하여 정상적인 사용자가 이용할 수 없도록 한다.
대응 방안
- 대상 포트가 80이고 TCP프로토콜을 사용하는 대량의 요청을 네트워크 로그에서 조사
- 웹방화벽(WAF)을 사용하여 공격에 대한 피해를 최소화
반사 DDoS 공격 형태 - SYN+ACK 반사 공격
- 공격자가 피해자의 IP를 도용한 후 반사체로 악용될 서버에 SYN 패킷을 보내고 해당 응답인 SYN/ACK 패킷을 피해자에게 전송하게 하는 공격
- 피해자는 SYN/ACK패킷을 대량으로 전송 받게 되면 해당 패킷을 처리하기 위해 리소스를 소모
대응 방안
- 네트워크 로그를 조사하고 TCPACK flag를 찾는다
- 방화벽 및 프록시 서버와 같은 모든 주변 장치에서 목적지 IP 기반 SYN/ACK 패킷 임계치를 설정하여 차단
반사 DDoS 공격 형태 - NTP반사 및 증폭 공격
- 공격자가 정상적인 NTP 서버의 트래픽을 사용하여 공격하는 형태
- 공격자는 공격 대상의 IP 주소로 도용하고 NTP 서버가 많은 양의 응답 트래픽(고정된 패킷 크기)을 공격 대상 서버에게 보내도록 요청
- 공격자는 다수의 인터넷에 공개된 NTP 서버에 monlist 요청을 하면 서버는 monlist 요청에 대한 응답을 일제히 공격 대상으로 전송하고 공격 대상은 네트워크 대역폭을 모두 소진하여 정상적인 사용자에 대한 서비스 장애가 발생
대응 방안
- 출발지 중 UDP123포트와 특정 패킷 크기를 가진 트래픽을 네트워크 로그에서 조사
- NTP서버에 대한 무단 트래픽을 제한하는 방화벽 규칙을 적용
반사 DDoS 공격 형태 - DNS반사 및 증폭 공격
- 공격자가 DNS 시스템을 악용하여 많은 양의 트래픽을 전송하는 형태의 공격
- 공격자가 피해자 IP 주소로 도용하여 다수의 공용 DNS 서버에 DNS 조회 요청을 전송하면 증폭된 응답은 공격 대상에게 전송되어 결국 사용 가능한 피해자 대역폭을 모두 소진하게 된다.
대응 방안
- DNS쿼리 요청이 없는 인바운드 DNS쿼리 응답을 네트워크 로그에서 조사
참고 자료
- 중소기업 대상 DDoS 공격 대응 가이드
현재 서버에서 몇개의 연결까지 가능한가요?
현재 리눅스 서버의 소켓 개수 제한은 다음과 같다.
- open files (-n) 1024
생성한 EC2의 스토리지 용량을 재부팅 없이, 늘리려면 어떻게 해야할까요?
1. EBS 볼륨 확장하기
- AWS console에 접속한다.
- EC2 서비스 > 인스턴스에 접속한다.
- 하드 디스크 볼륨을 늘리고 싶은 EC2를 선택하고, 하단에 루트 디바이스 선택
2. 볼륨 크기 조정 후 Linux 파일 시스템 확장하기
어떤 파티션의 크기를 조정해야 하는지 확인
$ lsblk
Linux 파티션 크기 조정
$ sudo growpart /dev/xvdf 1 #디바이스 이름과 파티션 번호를 구분하는 공백을 추가해야합니다.
파티션 크기 확인
$ lsblk
Linux 파일 시스템 확장
$ sudo resize2fs /dev/xvdf1
디스크 용량 확인
$ df -h