1강 / 20강

위협 모델 — 내 쇼핑몰을 누가 노리나

보안은 '무엇을 지킬지'부터 정하는 일

위협 모델 — 내 쇼핑몰을 누가 노리나
보안은 자물쇠를 파는 일이 아니라, 무엇을 누구에게서 지킬지를 먼저 정하는 일입니다.

여러분은 방금 mallshop.kr 이라는 작은 쇼핑몰 서버 한 대를 넘겨받았습니다. 앞 관리자는 "일단 돌아가게" 해 놓고 떠났어요. 화면은 잘 뜹니다. 주문도 들어옵니다. 그런데 안전한가요?

"해킹당하지 않게 해 주세요"는 좋은 목표가 아닙니다. 너무 커서 손댈 곳을 모르거든요. 보안은 언제나 세 가지 질문에서 시작합니다.

💎
무엇을
회원 정보 · 결제 · 서버 자체
🥷
누구에게서
자동 스캐너 · 사람 공격자 · 내부자
🚪
어디로
열린 포트 · 약한 암호 · 입력창

CIA — 지킨다는 것의 세 가지 뜻

보안에서 "지킨다"는 말은 셋으로 갈립니다. 셋 중 무엇을 지키느냐에 따라 방법이 달라져요.

기밀성 Confidentiality
아무나 못 보게 — 회원 비밀번호, 결제 정보
무결성 Integrity
아무나 못 바꾸게 — 주문 금액, 잔액, 서버 파일
가용성 Availability
필요할 때 쓸 수 있게 — 세일 날 서버가 안 죽게

DDoS(19강)는 가용성을 노리고, SQL 인젝션(11강)은 기밀성을, 파일 변조나 웹셸(14강)은 무결성을 노립니다. 공격을 볼 때마다 "이건 CIA 중 무엇을 깨려는 거지?" 하고 물어보세요.

지금 내 서버는 밖에서 어떻게 보일까요

말로만 하면 와닿지 않으니 직접 봅시다. 아래 셀은 공격자의 장비에서 실행됩니다 (셀 오른쪽 위 관점이 🥷 공격자인지 확인하세요). 공격자가 가장 먼저 하는 일 — 내 서버에 어떤 문이 열려 있는지 훑어보는 것입니다.

열려 있는 포트와 그 위에서 도는 프로그램을 봅니다.
🥷 공격자 브라우저 안에서 실행 (계산용)
지금 내 서버의 보안 점수 — 무엇이 열려 있고 무엇이 닫혀 있나
불러오는 중…

공격 표면(attack surface) — 문이 적을수록 안전하다

공격자가 노릴 수 있는 모든 지점을 합쳐 공격 표면이라고 합니다. 열린 포트 하나, 로그인 창 하나, 입력란 하나가 전부 표면이에요.

보안의 가장 기본은 놀랍도록 단순합니다 — 안 쓰는 문은 닫아라. 아무리 자물쇠가 좋아도, 애초에 없는 문은 뚫을 수 없으니까요. 이것을 최소화 원칙이라고 부릅니다.

🤔 확인 문제
새 서버를 인터넷에 올렸습니다. 가장 먼저 여러분을 '공격'할 가능성이 높은 것은?
🤔 확인 문제
세일 날 서버가 트래픽을 못 견디고 죽었습니다. 깨진 것은 CIA 중 무엇인가요?