중요 명령어를 root만 실행하거나 특정 그룹 사용자들만 실행시키기
특정 명령어를 그룹에 할당하여 해당 그룹에 속한 사용자들만 사용할 수 있도록 설정할 수 있습니다. 이 과정은 보안상 중요한 명령어에 대한 접근을 제한하는 데 유용합니다. 🔒
절차 설명
- 그룹 생성: 그룹을 생성하여 특정 명령어를 사용할 권한을 부여할 수 있습니다.
- 그룹에 권한 부여: 생성된 그룹에 명령어 실행 권한을 할당합니다.
- 그룹에 사용자 추가: 특정 사용자를 그룹에 추가하면, 해당 그룹에 속한 사용자만 지정된 명령어를 실행할 수 있습니다.
su 명령어의 권한 확인
ls -l /usr/bin/su
명령어를 사용하면, su 명령어의 속성을 확인할 수 있습니다.
-rwsr-xr-x 1 root root 56480 Aug 3 14:33 /usr/bin/su
위와 같이 -rwsr-xr-x 권한이 설정되어 있는데, 여기서 s는 setuid에 해당하며, su 명령어는 root 사용자로 실행됩니다. 다만, other(일반 사용자)가 실행할 수 있는 권한을 가지고 있어 누구나 실행할 수 있습니다.
SetUID, SetGID, Sticky Bit
- SetUID (4XXX): 실행 파일이 사용자 권한을 변경하여 실행되도록 합니다. (예: su 명령어)
- SetGID (2XXX): 그룹 권한을 변경하여 실행되도록 합니다.
- Sticky Bit (1XXX): 파일에 대한 접근을 제어하여 특정 사용자만 수정할 수 있게 합니다.
이들을 제거하려면 0XXX로 설정하면 됩니다.
경로 설정과 보안 위험
- Linux에서는 root와 일반 사용자가 사용할 수 있는 명령어의 위치가 구분되어 있어, 일반 사용자는 root의 명령어를 실행할 수 없습니다.
- 그러나, 사용자는 $HOME/bin 디렉터리에 실행 파일을 추가하여, 경로를 잘 설정하면 어디서나 해당 프로그램을 실행할 수 있게 됩니다.
이렇게 되면, 해커가 일반 사용자로 악성 코드를 $HOME/bin에 넣어두면, 해당 사용자가 로그인할 때 그 코드가 실행되므로 보안 위험이 발생할 수 있습니다.
보안 개선 방법
- 일반 사용자의 $HOME/.bash_profile에서 ~/bin 디렉터리를 빼두면, 악성 코드 실행을 방지할 수 있습니다. 🛡️
배치 파일
위의 절차처럼 한 줄씩 명령어를 입력해 실행하는 방식은 배치 파일이라고 하며, 자주 사용하는 명령어들을 자동화하여 실행할 수 있습니다. ⚙️
커널이나 시스템 정보를 알려주는 배너(banner) 파일 관리하기
Linux 서버에 HTTP, vsFTP 등 어플리케이션을 설치하면 커널이나 시스템 정보를 포함한 파일들이 존재합니다. 이러한 정보는 원격지에서 Telnet이나 SSH로 서버에 접속할 때 시스템 정보가 노출되므로 보안상 취약점을 초래할 수 있습니다. 🔒
배너 파일 관리의 중요성
- 서버의 시스템 정보가 외부에 노출되면, 해커가 시스템의 취약점을 파악하는 데 유리하게 작용할 수 있습니다.
- 따라서 이러한 배너 파일들은 빈 파일이나 다른 문자로 변경하여 시스템 정보를 숨겨야 합니다. 🕵️♂️
시스템 정보가 담긴 주요 배너 파일
- 콘솔 로그인 메시지
- /etc/issue 파일에 시스템 정보가 포함되어 있습니다.
- 예: cat /etc/issue
- /etc/issue 파일에 시스템 정보가 포함되어 있습니다.
- 원격 로그인 메시지
- /etc/issue.net 파일에도 원격 로그인 시 시스템 정보를 제공합니다.
- 예: cat /etc/issue.net
- /etc/issue.net 파일에도 원격 로그인 시 시스템 정보를 제공합니다.
- Linux 버전 정보
- /etc/redhat-release 파일에 리눅스 배포판 버전 정보가 있습니다.
- 예: cat /etc/redhat-release
- /etc/redhat-release 파일에 리눅스 배포판 버전 정보가 있습니다.
- 로그인 성공 메시지
- /etc/motd 파일은 Telnet이나 SSH 로그인 시 로그인 성공 메시지를 표시합니다.
- 예: cat /etc/motd
- /etc/motd 파일은 Telnet이나 SSH 로그인 시 로그인 성공 메시지를 표시합니다.
이 파일들을 안전하게 관리하는 방법
- 위의 파일들(/etc/issue, /etc/issue.net, /etc/redhat-release, /etc/motd)을 빈 파일로 변경하거나 비밀번호 같은 다른 문자로 대체하여 시스템 정보를 숨길 수 있습니다. 🔒
서버 애플리케이션 배너 파일 설정
- SSH 서버 배너 정보
- /etc/ssh/sshd_config 파일에서 배너를 비활성화하거나 다른 문자열로 대체합니다.
- 예: Banner none (이 설정을 통해 SSH 배너를 비활성화)
- /etc/ssh/sshd_config 파일에서 배너를 비활성화하거나 다른 문자열로 대체합니다.
- vsFTP 서버 배너 정보
- /etc/vsftpd/vsftpd.conf 파일에서 FTP 배너를 변경합니다.
- 예: ftpd_banner=Welcome ~ (배너를 다른 문자열로 설정)
- /etc/vsftpd/vsftpd.conf 파일에서 FTP 배너를 변경합니다.
- HTTP 서버 배너 정보
- /etc/httpd/conf/httpd.conf 파일에서 서버 정보를 숨깁니다.
- 예: ServerTokens OS, ServerSignature on
- 주석 처리하거나 다른 문자열로 변경하여 시스템 정보를 감춥니다.
- /etc/httpd/conf/httpd.conf 파일에서 서버 정보를 숨깁니다.
보안 개선 방법
- 위의 파일들을 수정하거나 주석 처리하여 시스템 정보를 노출하지 않도록 하는 것이 보안에 도움이 됩니다.
- 서버 배너를 감추는 것이 시스템을 더 안전하게 만들어 주며, 해커가 정보를 얻기 어렵게 합니다! 🛡️
결론적으로, 시스템 정보를 숨기고 배너를 관리하는 것은 보안 취약점을 줄이는 중요한 방법입니다.
/proc 가상 파일시스템을 통한 보안 설정
Linux 시스템은 다양한 보안 설정을 /proc 파일시스템을 통해 실시간으로 관리할 수 있습니다. 이를 통해 여러 가지 공격을 예방하고, 시스템 보안을 강화할 수 있습니다. 🛡️
/proc 파일시스템과 보안 설정
/proc는 가상 파일시스템으로, 시스템이 실행되는 동안만 메모리에서 존재하며 휘발성입니다. 시스템이 부팅할 때, /etc/sysctl.conf 파일에 설정된 커널 값을 사용하여 시스템을 운영합니다. 하지만 /proc에서 설정한 값들은 시스템이 꺼지면 사라지기 때문에, /etc/sysctl.conf 파일에서 설정을 저장해야 지속적으로 적용됩니다.
주요 보안 기능
- Open-Port Control
- Syn Flooding 방지
- Land Attack 방지
- Smurf Attack 방지
- ICMP Redirect 방지
- IP Spoofing 방지
- Fake (Rogue) IP Filtering
- Source Routing Blocking
- Ping of Death 방지
일반적인 공격 방지
- Buffer Overflow
- Race Condition
- Session Hijacking
- Directory Traversal 공격 방지
/proc와 /etc/sysctl.conf 파일
- /proc는 메모리에서 실행되는 가상 파일 시스템이며, 실시간으로 커널 자원에 대한 정보를 관리합니다.
- /etc/sysctl.conf는 하드디스크에 저장된 설정 파일로, 시스템 부팅 시 읽혀서 /proc로 복사됩니다.
/proc의 설정을 변경하면 즉시 반영되지만, 시스템 재부팅 후에도 지속적으로 적용되려면 /etc/sysctl.conf 파일에 설정을 저장해야 합니다. 💾
/proc와 /etc/sysctl.conf 설정 예시
- /etc/sysctl.conf에서의 설정:
- 예: net.ipv4.ip_forward=0
- /proc에서의 설정:
- 예: /proc/sys/net/ipv4/ip_forward
디렉터리 구분 방식이 다릅니다. /etc/sysctl.conf에서는 점(.)을 사용하고, /proc에서는 슬래시(/)를 사용합니다.
설정 방법
설정값을 변경하는 방법은 크게 3가지 방식이 있습니다:
- 파일 수정 방식 (지속적 설정)
- 파일을 열고 원하는 파라미터 값을 변경하여 저장합니다.
- 예: nano /etc/sysctl.conf에서 net.ipv4.ip_forward=0으로 수정 후 저장.
- 파일을 열고 원하는 파라미터 값을 변경하여 저장합니다.
- 즉시 반영 (proc 파일 시스템 사용)
- /proc 파일시스템을 통해 즉시 반영할 수 있습니다.
- 예: echo "1" > /proc/sys/net/ipv4/ip_forward
- /proc 파일시스템을 통해 즉시 반영할 수 있습니다.
- sysctl 명령어 사용
- sysctl 명령어를 통해 즉시 적용할 수 있습니다.
- 예: sysctl -w net.ipv4.ip_forward=0
- sysctl 명령어를 통해 즉시 적용할 수 있습니다.
설정 확인 방법
- sysctl 명령어를 사용하여 설정을 확인할 수 있습니다.
- 예: sysctl -p 또는 cat /proc/sys/net/ipv4/ip_forward
1.Syn Flooding 공격
Syn Flooding 공격은 TCP 연결의 3-way handshakes를 악용하여 서비스 거부(DoS) 공격을 유발하는 기법입니다. 이 공격은 클라이언트가 서버와 연결을 맺으려는 과정에서 서버의 자원을 고갈시키는 방식으로 이루어집니다.
TCP 3-Way Handshakes 과정
- 클라이언트가 SYN 패킷을 서버에 보냅니다.
- 서버는 클라이언트의 SYN에 대해 SYN+ACK 패킷을 보내며 연결을 기다립니다.
- 클라이언트는 ACK 패킷을 보내어 연결을 확립합니다.
정상적인 3-way handshakes 과정은 클라이언트가 최종 ACK를 보내면서 연결이 확립됩니다.
Syn Flooding 공격 절차
Syn Flooding 공격에서는 **클라이언트(해커)**가 이 과정을 교묘하게 속여 서버를 방해합니다. 공격자는 다음과 같은 방식으로 서버에 SYN 패킷을 보내 연결을 시도합니다:
- 클라이언트(해커)가 SYN1 패킷을 서버에 보냅니다.
- 서버는 SYN1 + ACK1 패킷을 보내 연결을 기다립니다.
- 공격자는 정상적으로 응답하는 대신, ACK1을 보내지 않고, 또 다른 SYN2 패킷을 서버에 보냅니다.
- 서버는 두 번째 SYN 패킷에 대해 SYN2 + ACK2를 보내고, 다시 클라이언트의 응답을 기다립니다.
- 이 과정은 SYN3, SYN4 등으로 계속 반복됩니다. 클라이언트는 ACK 응답을 보내지 않고 계속해서 새로운 SYN을 보내며 서버를 속입니다.
- 서버는 이 연결 요청들을 backlog queue에 저장하며, half-open 상태로 포트를 열어두고 기다립니다.
- 이로 인해 서버는 한정된 backlog queue 용량을 소모하고, 포트를 열어놓은 채로 대기 상태가 계속됩니다.
결과적으로 서버의 backlog queue가 꽉 차면 새로운 연결을 처리할 수 없게 되어 서비스 불능 상태가 됩니다.
Syn Flooding 공격 방어 방법
- Backlog Queue 용량 증가
서버의 backlog queue 용량을 늘리면 Syn Flooding 공격에 대한 내성이 커집니다. 즉, 공격자가 보내는 SYN에 의해 발생하는 half-open 연결 대기 상태를 더 많이 처리할 수 있게 됩니다. 하지만 이는 관리자가 선제적으로 proactive 조치를 취해야 하는 방법입니다. - 시간 제한 설정
서버에서 일정 시간이 지나면 반응 없는 SYN 요청을 자동으로 종료하는 방법도 방어책이 될 수 있습니다. - Syn Cookies
Syn Cookies를 사용하여 서버는 SYN 패킷을 처리할 때 상태 정보를 디스크에 저장하지 않고 쿠키를 생성하여 클라이언트에 전달합니다. 이를 통해 메모리를 절약하고, 미완성 연결을 효과적으로 방어할 수 있습니다. - Firewall 및 IDS 사용
**방화벽(Firewall)**이나 **침입 탐지 시스템(IDS)**을 사용하여 비정상적인 SYN 패킷을 차단하고, 공격을 사전에 탐지할 수 있습니다.
2.Smurf 공격 막기
스머프 공격은 해커가 무수한 출발지 주소가 가짜인 사설 IP_주소(10.0.~, 172.16.~, 192. 168.~) 패킷으로 서버에게 SYN로 보내면 서버는 클라이언트에게 SYN+ACK를 보내야 하는데 클라이언트 주소가 가짜이므로 SYN+ACK를 보내도 결국 서버는 클라이언트로부터 ACK를 받지 못하고 연결 대기 타임아웃에 걸릴 때까지 계속 포트를 열어놓고(half-open 상태) 기다리는 상태가 되므로 위험하다.
=>이런 smurf 공격을 예방하려면 TCP 연결을 초기화하는 tcp_syncookies 값을 1로 만들어서 온전한 패킷만 받게 해두면 된다. 사설 IP 등은 정식 인터넷에서 작동되지 못하기 때문에 인터넷 연결 활동을 기록하는 cookies에 들어갈 수 없으므로 이 기법으로 출발지 주소를 속이는 가짜 사설 IP를 걸러낸다. 들어오는 패킷의 헤더를 보면 출발지/목적지 IP, 출발지/목적지 MAC 등이 있으므로 패킷의 헤더를 보고 판단할 수도 있다.
3.Land 공격 막기
Land 공격은 해커가 출발지 주소와 목적지 주소를 동일하게 타겟 시스템의 주소로 설정하여 패킷을 전송하는 공격 기법입니다. 이 공격은 서버가 자기 자신과 연결을 맺으려 시도하게 만들어, 시스템의 속도를 느리게 하거나 마비시킬 수 있습니다.
Land 공격의 동작 방식
- 해커는 출발지 IP와 목적지 IP를 타겟 시스템의 IP로 설정합니다.
- 이 패킷은 타겟 시스템이 자기 자신과 연결을 맺으려 하도록 만듭니다.
- 타겟 서버는 외부 네트워크로 나갈 수 없으며, 무한 루프에 빠져 시스템 리소스를 고갈시키거나 서비스 거부(DoS) 상태가 됩니다.
이로 인해 서버는 응답이 느려지거나 정상적인 작업을 수행하지 못하게 됩니다.
Land 공격 방어 방법
- 패킷 검사 알고리즘 적용
서버에서 패킷 헤더를 검사하는 알고리즘을 적용하여 출발지와 목적지가 동일한 주소를 가진 패킷을 차단해야 합니다. 이를 통해 서버가 자기 자신과 연결을 맺는 것을 방지할 수 있습니다. - 방화벽 설정
방화벽을 이용하여 출발지 IP와 목적지 IP가 동일한 패킷을 차단할 수 있습니다. 이를 통해 불필요한 연결 시도를 방어할 수 있습니다. - 침입 탐지 시스템(IDS)
**침입 탐지 시스템(IDS)**을 사용하여 비정상적인 패킷을 실시간으로 탐지하고, 해당 공격을 차단할 수 있습니다.
Land 공격을 위한 예시 (hping3 사용)
hping3는 네트워크 패킷을 생성하고 전송하는 도구입니다. 아래 명령어는 Land 공격을 시도하는 예시입니다:
- 192.168.100.133: 타겟 서버의 IP 주소 (출발지 및 목적지 IP)
- -a 192.168.100.133: 출발지 IP를 타겟 서버 IP로 설정
- -s 100: 출발지 포트를 100으로 설정
- -p 100: 목적지 포트를 100으로 설정
- -S: SYN 플래그를 설정하여 연결 요청을 생성
- -c 100000: 100,000개의 패킷을 전송
이 명령어는 타겟 서버에게 자기 자신과의 연결을 시도하게 하여 서버의 리소스를 고갈시킬 수 있습니다.
4.ICMP Redirect 공격
ICMP Redirect 공격은 ping 명령어와 같은 ICMP 프로토콜을 악용하여, 공격자가 로컬 네트워크의 라우팅 경로를 변경시켜 모든 패킷을 자신을 경유하도록 만듭니다. 이를 통해 공격자는 네트워크 내의 모든 트래픽을 가로채어 정보를 탈취할 수 있습니다.
ICMP Redirect 공격의 동작 원리
- Ping (ICMP): 로컬 네트워크에서 타겟에 ping을 보내면, 일반적으로 ICMP 프로토콜을 사용하여 타겟에 도달하는 경로가 결정됩니다.
- MAC 주소 변경: 공격자는 ARP Spoofing 기법을 사용하여 자신의 MAC 주소를 로컬 라우터(게이트웨이)의 MAC 주소로 위장합니다. 이때 공격자는 라우터 대신 자신의 컴퓨터를 경유하도록 패킷을 전송합니다.
- 라우팅 경로 변경: 공격자는 ICMP Redirect 메시지를 이용하여 로컬 호스트에게 자신을 라우터처럼 보이게 하고, 패킷을 자신의 시스템을 통해 보내게 합니다.
- 패킷 가로채기: 이렇게 전송된 패킷을 공격자는 **중간자(MITM)**로서 가로채고 조작할 수 있습니다. 공격자는 이를 통해 민감한 정보를 탈취하거나 시스템에 악성 코드를 삽입할 수 있습니다.
ICMP Redirect 방어 방법
- ICMP Redirect 차단
ICMP Redirect 메시지를 사용하여 경로를 변경하는 것을 차단할 수 있습니다. 네트워크 장비(라우터)나 서버에서 ICMP Redirect를 비활성화하여, 불필요한 경로 변경을 막을 수 있습니다.- 라우터나 방화벽에서 ICMP Redirect를 차단하는 규칙을 추가합니다.
- ARP Spoofing 방지
ARP Spoofing을 이용한 MAC 주소 위장 공격을 방지하려면, 정적 ARP 테이블을 설정하거나 ARP 모니터링 툴을 사용하여 네트워크 내에서 비정상적인 ARP 요청을 탐지하고 차단할 수 있습니다. - 라우터 보안 설정 강화
라우터는 외부로 나가는 패킷이 반드시 자신의 경로를 따라 가도록 설정해야 합니다. 이를 위해 라우터의 보안 설정을 강화하고, 경로 변경을 불필요하게 허용하지 않도록 합니다. - 네트워크 패킷 모니터링
네트워크에서 발생하는 ICMP 패킷을 모니터링하고, 비정상적인 ICMP Redirect 메시지를 탐지하는 **침입 탐지 시스템(IDS)**을 사용할 수 있습니다. 이를 통해 의도하지 않은 경로 변경을 실시간으로 감지하고 대응할 수 있습니다.
5.IP Spoofing 공격
IP Spoofing은 해커가 가짜 IP 주소를 생성하여 타겟 서버에 특정 서비스를 요청하는 패킷을 보내는 공격 기법입니다. 이 공격은 SYN Flooding이나 Smurf 공격과 유사한 방식으로 DDoS(분산 서비스 거부) 공격을 수행하는 데 사용될 수 있습니다.
IP Spoofing 공격의 동작 방식
- 가짜 IP 생성: 해커는 자신의 IP 주소를 숨기고, 임의의 가짜 출발지 IP 주소를 생성합니다.
- 타겟 서버로 SYN 패킷 전송: 생성한 가짜 IP 주소를 출발지로 설정하여 SYN 패킷을 타겟 서버로 보냅니다.
- 서버 과부하 유도: 서버는 정상적인 연결을 요청받은 것처럼 가짜 IP 주소에 대한 응답을 보내게 되고, 실제 해커는 응답을 받지 않으므로 서버는 반복적인 연결 시도를 하게 됩니다. 이로 인해 서버의 자원을 고갈시킬 수 있습니다.
이와 같은 방식으로 IP Spoofing 공격은 DDoS 공격의 일환으로 서버의 자원을 소진시키고 서비스를 마비시킬 수 있습니다.
IP Spoofing 방어 방법
- Reverse Path Filtering (역경로 필터링)
역경로 필터링은 들어오는 패킷의 출발지 IP 주소를 확인하여, 그 패킷이 정상적인 경로를 통해 들어왔는지 확인하는 방법입니다. 이를 통해 가짜 IP 주소를 가진 패킷을 차단할 수 있습니다.- 사설 IP 주소나 불분명한 출발지 주소의 패킷을 차단하여 공격을 방지할 수 있습니다.
- 패킷 헤더 검사
패킷 헤더를 검사하여 출발지 주소가 일관성 없는 패킷을 필터링할 수 있습니다. 이를 통해 IP Spoofing 공격을 사전에 차단할 수 있습니다. - 서버 보안 설정 강화
서버나 네트워크 장비에서 **접근 제어 목록(ACL)**을 설정하여, 신뢰할 수 없는 IP 주소로부터 오는 트래픽을 제한하거나 차단할 수 있습니다. - DDoS 공격 대응 시스템 사용
DDoS 방어 시스템을 사용하여, 대규모의 트래픽을 실시간으로 분석하고 공격 패턴을 차단하는 방식으로 서비스 거부 공격에 대비할 수 있습니다.
Macof 공격
Macof 공격은 스위칭 네트워크 장비에서 발생할 수 있는 공격입니다. 이 공격은 해커가 스위치의 MAC 주소 테이블을 오버플로우시키기 위해 가짜 MAC 주소를 무작위로 생성하여 스위치에 보내는 방식입니다.
- 스위치 테이블 오버플로우: 해커는 가짜 MAC 주소를 사용하여 스위치의 MAC 주소 테이블을 채웁니다.
- 스위치 기능 마비: 스위치가 모든 포트에 대해 데이터를 전송하도록 만들고, 이로 인해 네트워크 성능 저하나 패킷 손실이 발생할 수 있습니다.
6.Faked (Rogue) IP Filtering
Faked IP Filtering은 주로 Rogue AP(Access Point) 공격에서 사용되는 기법으로, 해커가 IP 주소나 MAC 주소를 위조하여(혹은 Spoofing 또는 Redirecting 기법 사용) 네트워크에 침입하여 정상적인 호스트인 것처럼 행세하며 주변 호스트의 정보를 탈취하는 방식입니다.
Rogue AP(Access Point) 공격
- 해커의 기기 침입: 해커는 Rogue AP를 설정하여 무선 네트워크에 침입합니다. 이를 위해 MAC 주소나 IP 주소를 위조하여 네트워크에 존재하는 것처럼 가장합니다.
- 패킷 가로채기: Promiscuous 모드로 네트워크에 연결된 후, 주변의 모든 패킷을 가로채어 볼 수 있습니다. 내부 LAN에서는 노드들이 브로드캐스트로 주변 노드들을 찾으므로, 해커는 모든 네트워크 트래픽을 수집할 수 있습니다.
방어 방법: Faked IP 필터링
- NAC(Network Access Control) 도구 사용
- PacketFence와 같은 NAC 도구를 사용하여 무선 네트워크에 접속한 장비들을 모니터링하고 불법적인 접속을 차단할 수 있습니다. 이를 통해 Rogue AP의 침입을 탐지하고 자동으로 차단할 수 있습니다.
- Spoofing 및 Redirect 패킷 기록
- log_martians 기능을 설정하여 Spoofing 또는 Redirect된 패킷을 로그 파일에 기록하고, 이를 모니터링하여 의심스러운 IP 주소를 추적할 수 있습니다. 이 기록을 통해 해커의 활동을 파악하고 방어할 수 있습니다.
- TCP Wrapper 사용
- /etc/hosts.deny 파일을 활용하여 의심스러운 IP 주소나 Rogue AP의 접속을 차단할 수 있습니다. 이를 통해 특정 IP가 네트워크에 접속하지 못하도록 제한할 수 있습니다.
- Fail2Ban 도구 사용
- Fail2Ban 도구를 사용하여 의심스러운 접속을 탐지하고, 반복적인 공격을 자동으로 차단할 수 있습니다. 이를 통해 해커의 접속을 실시간으로 차단하여 보안을 강화할 수 있습니다.
7.Source Routing 패킷 전송 막기
Source Routing은 IP 패킷의 헤더에 출발지의 경로를 설정하는 기능으로, 해커가 이를 악용하여 게이트웨이를 속이고 패킷을 가로채는 공격을 할 수 있습니다.
Source Routing의 악용
- 해커의 공격 방식:
- 해커는 스푸핑 기법을 사용하여 자신의 MAC/IP 주소를 게이트웨이1의 주소로 속이고, 게이트웨이2를 만들거나 자신을 다른 게이트웨이로 설정합니다.
- 예를 들어, 해커가 route add default gw 10.10.10.1 dev eth0 명령어를 사용하여 자신을 게이트웨이2로 설정할 수 있습니다.
- 문제 발생:
- Source Routing이 enabled 되어 있을 경우, 네트워크의 호스트들은 게이트웨이1과 게이트웨이2를 통해 외부로 트래픽을 전송하게 됩니다. 이때, 해커가 설정한 게이트웨이2를 통해 패킷이 전달되면 해커는 호스트의 패킷을 가로채거나 조작할 수 있습니다.
- Pivoting 기법:
- 해커가 보안이 취약한 네트워크(예: 192.168.100.0/24)에 침투한 후, DMZ(10.10.10.0/24 네트워크)에 있는 중요한 서버로 침투하는 Pivoting 기법을 사용할 수 있습니다.
- 해커는 route add –net 10.10.10.0 netmask 255.255.255.0 dev eth0 명령어를 사용하여 새로운 네트워크를 추가하고, 중요한 네트워크로 접근합니다.
방어 방법
- 신뢰하는 라우터 지정:
- Source Routing을 막기 위해서는 신뢰하는 라우터의 주소를 명확하게 지정하여 패킷이 올바른 경로로 전달되도록 설정할 수 있습니다.
- 예를 들어, ping -r 192.168.100.2 (신뢰하는 게이트웨이)로 target host(192.168.100.110)에게 직접 패킷을 보내도록 할 수 있습니다.
- Source Routing 비활성화:
- Source Routing을 비활성화하는 것이 가장 효과적인 방어 방법입니다. 이 설정을 통해 패킷이 악성 게이트웨이를 통과하는 것을 방지할 수 있습니다.
- 네트워크 라우터에서 Source Routing을 비활성화하거나 echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route 명령어를 사용하여 이를 비활성화할 수 있습니다.
8.Ping of Death 공격 막기
Ping of Death는 해커가 IP 출발지 주소를 위장하여 네트워크상에서 ARP Echo Request를 브로드캐스트함으로써 발생하는 DoS(Denial of Service) 공격입니다.
Ping of Death 공격의 방식
- 해커의 공격:
- 해커가 출발지 네트워크를 타겟 서버의 IP 주소로 위장하여 네트워크 상의 모든 클라이언트들에게 ARP Echo Request를 브로드캐스트합니다.
- 클라이언트들은 이 요청을 받고, 해커에게 MAC 주소를 포함한 Echo Reply를 유니캐스팅으로 보냅니다.
- 이로 인해 네트워크 트래픽이 과도하게 증가하며, 서버가 DoS 공격을 받게 됩니다.
- Syn Flooding 공격과 유사:
- Ping of Death는 Syn Flooding 공격처럼 시스템 자원을 소진시켜 서비스가 마비되게 하는 DoS 공격의 일종입니다.
Ping of Death 방어 방법
- 브로드캐스트 패킷 차단:
- ARP Echo Request에 응답하지 않도록 하여, 브로드캐스트 패킷이 클라이언트들에게 전파되지 않게 할 수 있습니다.
- 패킷 필터링:
- 라우터와 서버에서 패킷 필터링을 설정하여, 불필요한 ICMP Echo Request 패킷을 차단하거나, 네트워크 상의 패킷 트래픽을 조절하는 방법이 있습니다.
- 이를 통해 Ping of Death 공격을 방어하고, 서버가 DoS 상태에 빠지지 않도록 할 수 있습니다.
- 대기업 웹사이트의 예:
- 많은 대기업 웹사이트에서는 ping에 대한 응답을 하지 않음으로써, Ping of Death 공격을 사전 차단합니다.
일반 공격 및 방어 방법
1. Buffer Overflow 공격
- 개요: 프로그램이 메모리 영역을 넘어서는 데이터를 저장하려 할 때 발생하며, 이를 악용하여 해커는 이웃한 메모리 영역을 덮어쓰고, 악성 코드를 실행하거나 중요한 데이터를 유출시킬 수 있습니다.
- 위험한 환경: C, C++ 등 메모리 영역을 직접 다룰 수 있는 언어로 작성된 프로그램에서 취약점이 발생할 수 있습니다.
- 방어 방법:
- LibSafe와 같은 보안 라이브러리를 사용하여 위험한 함수들을 모니터링하고 차단합니다.
- malloc(), strcpy() 등의 함수를 검사하여 비정상적인 동작을 차단.
- 컴파일러 제한: gcc나 g++와 같은 컴파일러에서 취약한 코드를 작성하지 않도록 주의합니다.
2. 프로그램 설정상 오류를 이용한 공격
- 개요: 서버나 네트워크 장비에서 설정 오류나 기본 패스워드를 사용하여 공격자가 시스템에 침투하는 방식입니다.
- 위험한 환경: HTTP, DNS, FTP, Mail 서버 등에서 설정상 오류로 인해 취약점이 발생할 수 있습니다.
- 방어 방법:
- 서버의 초기 패스워드를 변경하고, 설정 파일을 신중하게 관리합니다.
- 서버에 대한 취약점 분석 도구를 사용하여 보안 취약점을 사전에 점검합니다.
- Secure Coding을 통해 API 오류를 사전에 방지하고, 사용자 입력값 검증을 철저히 합니다.
3. Server Contamination (서버 오염 공격)
- 개요: 서버에 악성 스크립트를 삽입하여, 클라이언트가 서버에 접속할 때 이를 통해 감염시키는 방식입니다. 대표적으로 **XSS (Cross Site Scripting)**가 있습니다.
- 위험한 환경: 외부 입력을 받는 웹 서버에서 클라이언트의 브라우저로 악성 코드가 전달되어 감염을 유발합니다.
- 방어 방법:
- 사용자 입력에 대한 입력값 검증 및 스크립트 필터링을 적용하여 XSS 공격을 방지합니다.
- 파일 확장자 검증을 통해 악성 스크립트가 포함된 파일을 서버에 업로드하지 못하도록 차단합니다.
- Virus Wall과 같은 보안 솔루션을 사용하여 외부 공격을 차단합니다.
4. Session Hijacking (세션 하이재킹)
- 개요: 해커가 네트워크 상에서 세션 정보를 가로채어 사용자의 세션을 탈취하는 공격입니다. 이때 ARP Spoofing과 Man in the Middle (MitM) 공격이 자주 사용됩니다.
- 위험한 환경: 사용자가 서버와 연결된 세션을 수행하는 동안, 해커가 세션 정보를 훔쳐 시스템에 접근합니다.
- 방어 방법:
- ARP Spoofing을 차단하기 위해 static MAC 주소를 설정합니다.
- Promisc 모드가 활성화된 네트워크 호스트를 탐지하여 네트워크 모니터링을 통해 의심스러운 활동을 식별합니다.
5. Injection 공격 (SQL, OS Injection 등)
- 개요: 해커가 SQL Injection을 통해 데이터베이스에 악성 명령어를 삽입하거나, OS Injection을 통해 운영체제 명령어를 실행하도록 유도하는 공격입니다.
- 위험한 환경: 웹 애플리케이션이 SQL이나 OS 명령어를 실행할 때 입력값에 대한 검증이 제대로 이루어지지 않으면 공격자가 이를 악용할 수 있습니다.
- 방어 방법:
- SQL 쿼리나 시스템 명령어에서 입력값 검증을 수행하고, 매개변수화된 쿼리를 사용하여 위험한 명령어 실행을 차단합니다.
- OS Injection을 방지하기 위해, 사용자의 입력값을 필터링하고, 외부 쉘 명령어 실행을 제한합니다.
6. Directory Traversal 공격
- 개요: HTTP나 FTP 서버에서 설정 오류나 애플리케이션 결함을 이용해 상위 디렉토리로 이동하여 중요한 시스템 파일에 접근하는 공격입니다.
- 위험한 환경: 공개된 디렉토리 외의 경로로 접근하여 중요한 파일을 탈취하거나 수정할 수 있습니다.
- 방어 방법:
- chroot 명령어를 사용하여 공개된 디렉토리를 가상 루트 디렉토리로 설정하고, 상위 디렉토리로의 접근을 차단합니다.
- 웹 서버에서 디렉토리 접근 제어를 강화하고, 상위 경로로의 이동을 제한합니다.
7. 악성코드 공격
- 개요: Virus, Worm, Trojan Horse, Bot (BotNet), RootKit 등이 시스템에 침투하여 악성 행위를 수행하는 공격입니다.
- 방어 방법:
- 최신 백신 프로그램을 사용하고, 정기적인 시스템 검사를 수행하여 악성코드를 차단합니다.
- 패치 관리와 침입 탐지 시스템을 통해 악성코드의 침투를 막습니다.
8. Cross-Site Request Forgery (CSRF) 공격
- 개요: CSRF는 공격자가 사용자의 인증 정보를 속여 서버에 악성 요청을 보내는 공격입니다.
- 위험한 환경: 사용자가 로그인된 상태에서 공격자가 요청을 보내 서버에 악성 명령을 실행시킵니다.
- 방어 방법:
- 토큰 기반 인증을 사용하여, 요청이 유효한지 검증합니다.
- Referer 헤더 검사나 HTTP 요청 방식 검증을 통해 CSRF 공격을 방지합니다.
9. Server Side Request Forgery (SSRF) 공격
- 개요: 공격자가 서버를 속여 다른 내부 서버로 악성 요청을 보내는 공격입니다.
- 위험한 환경: 외부에서 온 요청이 내부 리소스로 전달될 때 발생할 수 있습니다.
- 방어 방법:
- 서버의 외부 네트워크 접근을 제한하고, 요청의 유효성을 철저히 검증합니다.
- 네트워크 분리 및 방화벽 설정을 통해 내부 서버와 외부의 접근을 통제합니다.
10. Brute Force 공격
- 개요: 해커가 비밀번호를 추측하여 시스템에 접근하려는 공격입니다.
- 방어 방법:
- 계정 잠금 정책을 적용하여 일정 횟수 이상 실패하면 계정을 잠그는 방법을 사용합니다.
- **2단계 인증 (2FA)**을 통해 비밀번호 외에 추가적인 인증을 요구합니다.
11. Privilege Escalation 공격
- 개요: 시스템의 낮은 권한을 가진 사용자가 높은 권한을 탈취하는 공격입니다.
- 방어 방법:
- 최소 권한 원칙을 준수하여, 사용자가 필요한 권한만 부여합니다.
- 권한 감사 및 로그 모니터링을 통해 권한 상승 시도를 탐지하고 방지합니다.
12. Man-in-the-Middle (MitM) 공격
- 개요: 공격자가 사용자와 서버 사이에서 통신을 가로채는 공격입니다.
- 방어 방법:
- SSL/TLS를 사용하여 데이터 전송을 암호화하고, 통신의 무결성을 보장합니다.
- 인증서 검증을 통해 의심스러운 인증서를 차단합니다.
13. Denial of Service (DoS) 및 Distributed Denial of Service (DDoS) 공격
- 개요: 서버나 네트워크에 과도한 트래픽을 유발하여 서비스를 중단시키는 공격입니다.
- 방어 방법:
- 트래픽 분석 및 비정상적인 요청 차단을 통해 공격을 탐지합니다.
- Rate Limiting 및 웹 애플리케이션 방화벽을 사용하여 공격을 차단합니다.
14. DNS Spoofing 공격
- 개요: DNS 응답을 변조하여 사용자가 잘못된 웹사이트에 접속하게 만드는 공격입니다.
- 방어 방법:
- **DNSSEC (DNS Security Extensions)**를 사용하여 DNS 응답의 무결성을 보장합니다.
- DNS 캐시 청소와 암호화된 DNS를 사용하여 보안을 강화합니다.
15. Ransomware 공격
- 개요: 공격자가 시스템 파일을 암호화하고, 이를 풀기 위한 금전을 요구하는 공격입니다.
- 방어 방법:
- 백업을 정기적으로 수행하여 데이터를 보호합니다.
- 보안 패치와 악성코드 방지 솔루션을 사용하여 랜섬웨어 침투를 차단합니다.
'Linux 보안' 카테고리의 다른 글
리눅스 보안 5일차 핵심요약본 (0) | 2025.03.12 |
---|---|
리눅스 보안 5 (0) | 2025.03.12 |
리눅스 보안 4일차 핵심요약본 (0) | 2025.03.11 |
리눅스 보안 4 (0) | 2025.03.11 |
리눅스 보안 3 (1) | 2025.03.10 |