시스템을 꿰뚫는 보안 인포그래픽 여섯 장
기술을 이해하는 가장 빠른 길은 그림이다. 복잡하고 난해한 개념도, 잘 정리된 도식 하나면 한눈에 들어온다. 이번 글에서는 보안 전문가 Dan Nanni가 제작한 여섯 장의 인포그래픽을 바탕으로, 보안과 시스템 아키텍처의 핵심 원리를 풀어본다. 각 인포그래픽은 하나의 주제를 시각화해 기술의 작동 원리를 설명하고 있으며, 특히 시스템 관리자와 개발자, 보안 초심자에게 큰 도움이 될 수 있는 내용들이다.
CVE (Common Vulnerabilities and Exposures)는 우리가 사용하는 소프트웨어에서 발견된 보안 취약점을 체계적으로 기록하고 공개하는 국제 표준 시스템이다.
처음 취약점을 발견한 연구자나 보안 분석가는 CVE ID를 신청한다. 해당 요청은 CVE Program의 공식 참여자에게 전달되고, 승인되면 고유한 CVE 번호가 발급된다. 이후 이 취약점에 대한 상세 기술 정보와 영향, 패치 여부 등이 정리되어 공개 데이터베이스에 등록된다.
이러한 시스템은 중복 리포트를 방지하고, 보안 업데이트 및 대응을 위한 중요한 기준점을 제공한다. 보안 패치의 기준이 되고, 리스크 평가의 기반이 되며, 전 세계 보안 커뮤니티를 연결하는 허브 역할을 한다.
핵심 개념:
CVE(Common Vulnerabilities and Exposures)는 전 세계적으로 알려진 소프트웨어 보안 취약점을 기록하는 공개 데이터베이스입니다.
구체 과정:
발견 (Discover): 보안 연구자나 기업이 새로운 취약점을 식별함.
요청 (Request): CVE ID를 신청함.
예약 (Reserve): CVE 번호가 예약되고, 공개되지 않은 상태에서 취약점이 문서화됨.
보고 (Report): 발견자가 세부 정보를 CVE Program 참여자에게 전달함.
제출 (Submit): 참여자가 정보를 공식적으로 등록.
공개 (Publish): CVE 웹사이트나 NVD를 통해 전체 공개.
특징:
중복 방지, 명확한 추적성 제공
기업, 정부, 연구기관이 보안 패치 및 대응을 위해 적극 활용
디지털 서명(Digital Signature)은 전자 문서의 진위를 확인하고 위조 여부를 검증하는 암호화 기술이다.
서명자는 문서의 내용을 해시(Hash) 함수로 요약한 후, 이 해시값을 자신의 개인 키(Private Key)로 암호화해 디지털 서명을 만든다. 수신자는 이 서명을 공개 키(Public Key)로 복호화하고, 동일한 해시 함수를 통해 문서의 해시값을 계산해 비교한다. 값이 일치하면 문서가 위조되지 않았음을 확인할 수 있다.
전자계약(Electronic Contract), 보안 이메일(Secure Email), 소프트웨어 배포(Software Distribution) 등에서 폭넓게 활용되며, 법적 효력을 갖는 방식이기도 하다.
핵심 개념:
디지털 서명은 문서의 무결성과 발신자 인증을 보장하는 암호화 방식입니다.
구체 과정:
Alice가 문서를 작성하고 해시 함수를 통해 요약값(hash)을 생성함.
이 해시를 개인 키로 암호화해 디지털 서명을 생성함.
Bob은 Alice의 공개 키로 디지털 서명을 복호화하고,
문서를 동일한 해시 알고리즘으로 해싱하여 해시값을 비교함.
두 해시값이 일치하면 문서의 위변조가 없었음을 확인하고, Alice가 진짜 보낸 사람임을 검증함.
활용 분야:
전자계약, 보안 이메일, 소프트웨어 업데이트 검증 등
SSH(Secure Shell)는 원격 서버에 안전하게 접속할 수 있도록 해주는 암호화 프로토콜이다. Telnet처럼 명령어 기반 접속을 가능하게 하면서도, 모든 통신을 암호화하여 보안을 강화했다.
SSH는 클라이언트와 서버 간에 먼저 TCP 핸드셰이크(TCP Handshake)를 수행한 뒤, 알고리즘 협상(Algorithm Negotiation), Diffie-Hellman 키 교환(Diffie-Hellman Key Exchange), 공개 키 교환(Public Key Exchange)을 통해 세션 키(Session Key)를 생성한다.
이후의 데이터 전송은 이 세션 키로 암호화되므로, 중간자가 통신을 가로채더라도 내용을 해석하거나 조작할 수 없다.
핵심 개념:
SSH(Secure Shell)는 안전한 원격 접속을 위해 암호화된 채널을 제공합니다.
구체 과정:
3-Way TCP 핸드셰이크를 통해 초기 연결
암호 알고리즘 및 버전 협상
Diffie-Hellman 키 교환 수행
서버와 클라이언트가 서로의 공개 키 교환
무작위 숫자 생성 → 암호화 → 복호화 과정을 통해 세션 키 생성
세션이 성립되고, 이후 모든 데이터는 암호화되어 전송
특징:
기밀성, 무결성, 인증 보장
기본 포트 22 사용, Telnet 대체로 널리 사용
DNS(Domain Name System)는 사용자가 입력하는 도메인 이름을 실제 IP 주소로 변환해주는 시스템이다. 이 시스템을 노린 대표적인 공격 방식이 DNS 캐시 포이즈닝(DNS Cache Poisoning)이다.
공격자는 DNS 서버에 가짜 정보를 주입하고, 이 정보가 서버에 저장된 후 사용자는 엉뚱한 IP 주소로 연결된다. 예를 들어 foo.com이라는 정상적인 도메인을 10.0.0.10이라는 악성 서버로 연결되도록 조작할 수 있다.
이러한 공격을 막기 위해 사용하는 기술이 DNSSEC(Domain Name System Security Extensions)이다. DNS 응답에 디지털 서명을 추가하여 진짜 응답임을 검증한다.
핵심 개념:
DNS 요청에 악성 정보를 삽입해 사용자를 가짜 웹사이트로 유도하는 공격
공격 시나리오:
공격자가 DNS Resolver에 잘못된 정보(예: fake.com → 10.0.0.10)를 주입
피해자의 시스템은 이를 캐시에 저장하고, 향후 해당 도메인을 잘못된 IP로 해석
사용자는 실제 사이트가 아닌 악성 사이트에 접속하게 됨
방어책:
DNSSEC(DNS Security Extensions)를 통해 DNS 응답의 진위를 검증
암호화 서명을 사용해 데이터 변조 여부 확인
PAM(Pluggable Authentication Modules)은 다양한 인증 방식을 유연하게 적용할 수 있도록 해주는 리눅스(Linux) 인증 프레임워크다.
사용자가 로그인 등의 인증 요청을 하면 PAM API(Application Programming Interface)가 PAM 라이브러리(libpam.so)로 요청을 전달하고, 설정 파일(PAM Config Files)에 따라 적절한 인증 모듈(PAM Modules)이 선택된다. 예를 들어 pam_unix.so는 기본 패스워드 인증, pam_google_authenticator.so는 OTP 인증을 수행한다.
이처럼 PAM은 모듈 단위로 인증 로직을 구성할 수 있어, 서비스별 인증 방식을 일관성 있게 통합하고, 2단계 인증, LDAP, 생체 인증 등도 손쉽게 적용할 수 있다.
핵심 개념:
PAM(Pluggable Authentication Modules)은 다양한 인증 방식 (패스워드, OTP, LDAP 등)을 유연하게 구성할 수 있게 하는 Linux 인증 프레임워크입니다.
구성 요소:
PAM-Aware App: SSH, sudo, su, login, FTP 등
PAM API: 인증 요청을 PAM 라이브러리에 전달
PAM 라이브러리(libpam.so): config 파일 읽어들임
PAM config 파일: /etc/pam.conf 또는 /etc/pam.d/ 아래 개별 설정 파일
PAM 모듈: 다양한 인증 방식에 따른 동적 모듈 (pam_unix.so, pam_google_authenticator.so 등)
특징:
유연하고 모듈화된 인증 체계
사용자 정의 인증 방식 적용 가능
리눅스 환경에서는 수많은 보안 도구가 존재하며, 이를 적절히 조합하면 강력한 방어 체계를 구축할 수 있다.
iptables와 nftables는 네트워크 트래픽을 제어하는 방화벽(Firewall) 도구이고, AppArmor와 SELinux(Security-Enhanced Linux)는 샌드박싱(Sandboxing)과 권한 제어 기능을 제공한다.
AIDE(Advanced Intrusion Detection Environment), Tripwire 등은 무결성 검사 도구이고, Snort와 Suricata는 침입 탐지 시스템(IDS, Intrusion Detection System)이다. ClamAV는 오픈소스 악성코드 탐지기이며, auditd는 시스템 활동을 로깅하여 추후 포렌식 분석에 활용할 수 있게 해준다.
이 모든 도구들은 함께 구성할 때 더 강력한 보안 효과를 발휘하며, 공격 전파를 차단하고 시스템 피해를 최소화할 수 있다.
핵심 개념:
리눅스 시스템 보안을 위한 광범위한 도구 목록이 카테고리별로 정리되어 있음.
주요 도구 예시:
방화벽: iptables, nftables, ufw
샌드박싱: AppArmor, SELinux
로그 모니터링: auditd, OSSEC, AIDE
악성코드 탐지: chkrootkit, rkhunter, ClamAV
무결성 검사: AIDE, Tripwire
침입 탐지 시스템(IDS): Snort, Suricata
활용 방식:
조합하여 다층 방어 전략(Multi-Layered Defense)을 구현할 수 있음
이 인포그래픽은 보안 전문가 Dan Nanni가 제작한 것으로, 다음 사이트에서 더 많은 자료를 확인할 수 있다.
제작자: Dan Nanni
공식 웹사이트: https://study-notes.org
트위터 계정: https://twitter.com/study_notes
오픈 소스 저장소: https://github.com/dannanni/study-notes