수학으로 해커를 잡다: 내가 Self‑Healing Server를 만든 방법
Source: Dev.to

사이버 보안을 한 번도 다뤄본 적이 없다면, DevSecOps라는 단어가 위협적으로 들릴 수 있습니다—마치 어두운 방에 후드티를 입고 앉아 해커를 막기 위해 격렬히 타이핑해야 하는 것처럼 말이죠. 실제로 좋은 보안은 빠르게 타이핑하는 것이 아니라, 똑똑한 알람을 구축하는 것입니다.
이번 최신 엔지니어링 프로젝트에서는 이상 탐지 엔진을 처음부터 직접 만들었습니다. 아래는 간단한 수학이 서버에게 스스로 방어하도록 가르치는 방법을 초보자도 이해할 수 있게 정리한 내용입니다.
문제: 하드코딩된 규칙은 실패한다
인기 있는 온라인 스토어를 운영하고 있다고 가정하고 방화벽에 이렇게 명령했다고 생각해 보세요:
“1초에 10번 이상 스토어에 접근하려는 경우, 그들을 차단하라! 이는 무차별 대입 공격을 시도하는 해커일 것이다.”
보통 화요일엔 잘 작동하지만, 블랙 프라이데이에는 수백 명의 실제 고객이 사이트에 몰려듭니다. 방화벽은 모두를 차단하고, 비즈니스는 중단됩니다. 하드코딩된 한계치는 현실에 적응하지 못합니다.
해결책: “휴식 심박수”
엄격한 규칙 대신, 엔진은 롤링 베이스라인—서버의 휴식 심박수—를 계산합니다.
- 매분마다 백그라운드 스크립트가 트래픽을 평가하고 현재 평균(예: 초당 1 요청)을 결정합니다.
- 트래픽이 점진적으로 증가하면(예: 세일 기간), 베이스라인이 조정되어 더 높은 볼륨을 새로운 정상으로 간주합니다.
트리거: Z‑Score (컨베이어 벨트)
실제 공격을 포착하기 위해 엔진은 60초 슬라이딩 윈도우—들어오는 트래픽의 컨베이어 벨트—를 사용합니다.
- 벨트 위에 있는 모든 IP 주소를 추적합니다.
- 각 IP의 요청 속도를 베이스라인과 Z‑Score를 이용해 비교합니다.
Z‑Score가 3.0 이상이면 스파이크가 99.7 % 확률로 거대한 이상 현상이며, 단순히 열성적인 사용자가 아니라는 것을 의미합니다. (테스트 중에 40.17이라는 Z‑Score를 우연히 보았는데, 엔진은 주저하지 않았습니다.)
함정문: 자동 차단 및 Slack 알림
수학이 공격자를 표시하면 엔진은 자동으로 동작합니다:
- Block: 서버 핵심 방화벽(
iptables)에 명령을 보내 해당 IP의 모든 트래픽을 즉시 차단합니다. - Alert: Slack에 포맷된 메시지를 전송해 공격자의 IP와 시도 심각도를 보여줍니다.
- Recovery: 10분 타이머를 시작하고, 타이머가 만료되면 IP를 자동으로 해제해 정당한 사용자가 영구적으로 차단되는 것을 방지합니다.
결론
이 엔진을 구축하면서 현대 보안은 더 높은 벽을 쌓는 것이 아니라, 더 똑똑한 센서를 만드는 것임을 깨달았습니다. 간단한 통계와 자동화된 방화벽을 결합하면, 여러분이 잠자는 동안 스스로 회복하는 서버를 만들 수 있습니다!