위협 모델 — 내 쇼핑몰을 누가 노리나
보안은 '무엇을 지킬지'부터 정하는 일
보안은 자물쇠를 파는 일이 아니라, 무엇을 누구에게서 지킬지를 먼저 정하는 일입니다.
여러분은 방금 mallshop.kr 이라는 작은 쇼핑몰 서버 한 대를 넘겨받았습니다.
앞 관리자는 "일단 돌아가게" 해 놓고 떠났어요. 화면은 잘 뜹니다. 주문도 들어옵니다.
그런데 안전한가요?
"해킹당하지 않게 해 주세요"는 좋은 목표가 아닙니다. 너무 커서 손댈 곳을 모르거든요.
보안은 언제나 세 가지 질문에서 시작합니다.
CIA — 지킨다는 것의 세 가지 뜻
보안에서 "지킨다"는 말은 셋으로 갈립니다. 셋 중 무엇을 지키느냐에 따라 방법이 달라져요.
기밀성 Confidentiality
아무나 못 보게 — 회원 비밀번호, 결제 정보
무결성 Integrity
아무나 못 바꾸게 — 주문 금액, 잔액, 서버 파일
가용성 Availability
필요할 때 쓸 수 있게 — 세일 날 서버가 안 죽게
DDoS(19강)는 가용성을 노리고, SQL 인젝션(11강)은 기밀성을,
파일 변조나 웹셸(14강)은 무결성을 노립니다. 공격을 볼 때마다
"이건 CIA 중 무엇을 깨려는 거지?" 하고 물어보세요.
지금 내 서버는 밖에서 어떻게 보일까요
말로만 하면 와닿지 않으니 직접 봅시다. 아래 셀은 공격자의 장비에서 실행됩니다
(셀 오른쪽 위 관점이 🥷 공격자인지 확인하세요). 공격자가 가장 먼저 하는 일 —
내 서버에 어떤 문이 열려 있는지 훑어보는 것입니다.
열려 있는 포트와 그 위에서 도는 프로그램을 봅니다.
공격 표면(attack surface) — 문이 적을수록 안전하다
공격자가 노릴 수 있는 모든 지점을 합쳐 공격 표면이라고 합니다.
열린 포트 하나, 로그인 창 하나, 입력란 하나가 전부 표면이에요.
보안의 가장 기본은 놀랍도록 단순합니다 — 안 쓰는 문은 닫아라.
아무리 자물쇠가 좋아도, 애초에 없는 문은 뚫을 수 없으니까요.
이것을 최소화 원칙이라고 부릅니다.
🤔 확인 문제
새 서버를 인터넷에 올렸습니다. 가장 먼저 여러분을 '공격'할 가능성이 높은 것은?
해설 대부분의 첫 접촉은 표적 공격이 아니라 무차별 스캔입니다. 봇은 여러분이 누구인지 관심 없어요. 그냥 '열린 문'을 찾을 뿐입니다. 그래서 '우리는 작으니 괜찮다'는 생각이 위험합니다.
🤔 확인 문제
세일 날 서버가 트래픽을 못 견디고 죽었습니다. 깨진 것은 CIA 중 무엇인가요?
해설 '쓸 수 있어야 할 때 못 쓰게' 된 것이므로 가용성이 깨졌습니다. 공격자가 일부러 그렇게 만들면 DDoS(19강)이고, 그냥 설계가 부족해도 결과는 같습니다. 가용성도 어엿한 보안 목표예요.