해킹의 이론을 알아야
내 시스템을 지킬 수 있다
공격자의 사고방식으로 방어하고, 합법적 절차로 수익을 만드는 실전 사이버보안 지식 10모듈. 모든 도구·코드는 본인 소유 시스템 또는 명시적 승인 범위 내 사용을 전제로 합니다.
사이버보안 사고 체계 — 공격자처럼 생각하기
보안은 도구가 아니라 사고 체계다. 모든 보안 활동은 CIA 삼각형(기밀성 Confidentiality · 무결성 Integrity · 가용성 Availability)을 지키기 위해 존재하며, 공격자는 이 세 가지 중 하나를 깨려고 시도한다.
위협 모델링 4단계
- 자산 파악 — 무엇을 지켜야 하는가 (데이터, 서버, 계정, 평판)
- 공격 표면 분석 — 외부에서 접근 가능한 모든 지점 (포트, API, 로그인 폼, 이메일)
- 위협 행위자 정의 — 스크립트 키디부터 국가 단위 APT까지, 누가 왜 노리는가
- 완화 우선순위 — 발생확률 × 피해규모 기준으로 대응 순서 결정
Kill Chain (록히드마틴)
정찰 → 무기화 → 전달 → 익스플로잇 → 설치 → C2 → 목표달성. 이 7단계 중 어느 하나만 끊어도 공격은 실패한다 — 방어자는 모든 단계를 막을 필요 없이 한 곳만 막으면 된다.
MITRE ATT&CK
실제 공격 그룹들이 사용한 전술·기법을 표준화한 무료 지식베이스. 자신의 시스템에 어떤 방어가 부족한지 체크리스트로 활용 가능 (attack.mitre.org).
윤리적 해킹 방법론 — 합법과 불법의 경계
윤리적 해킹(모의침투 테스트)은 승인(authorization)이 있느냐 없느냐로 갈린다. 기술은 동일하지만 서면 계약서 한 장이 "보안 전문가"와 "범죄자"를 가른다.
표준 방법론 — PTES / OWASP Testing Guide
| 단계 | 내용 | 필수 서류 |
|---|---|---|
| 1. 사전 협의 | 테스트 범위(IP·도메인), 기간, 금지행위 명시 | Rules of Engagement (RoE) |
| 2. 정보 수집 | 공개정보(OSINT) 기반 자산 식별 | 승인서 사본 상시 소지 |
| 3. 취약점 스캔 | 자동화 도구로 알려진 취약점 탐지 | 스캔 로그 보관 |
| 4. 검증(수동) | 거짓양성 제거, 실제 악용 가능성 확인 | - |
| 5. 보고서 | CVSS 점수, 재현 절차, 해결 방안 | 기밀유지계약(NDA) |
합법적으로 연습할 수 있는 곳
- TryHackMe / HackTheBox — 가상 머신 기반 실습 환경, 무료 티어 존재
- OWASP Juice Shop / DVWA — 로컬 Docker로 띄우는 취약 웹앱 연습장
- PortSwigger Web Security Academy — 무료, Burp Suite 개발사 운영, 실전형 랩
정찰 & 자산 진단 도구 — nmap 실전
정찰 도구는 "무기"가 아니라 재고 관리 도구다. 내 홈네트워크나 회사 서버에 어떤 포트가 열려있는지, 불필요한 서비스가 노출돼 있는지 확인하는 것이 핵심 목적이다.
// 자신의 네트워크 자산 확인 — nmap# 내 로컬 네트워크에서 살아있는 호스트 찾기 (자신의 라우터 대역)
nmap -sn 192.168.1.0/24
# 특정 자기 소유 서버의 열린 포트와 서비스 버전 확인
nmap -sV -p 1-1000 my-own-server.com
# 웹서버가 알려진 취약 서비스를 노출하고 있는지 점검 (NSE 스크립트)
nmap --script vuln -p 80,443 my-own-server.com
왜 돈이 되는가
중소기업은 "우리 서버에 뭐가 열려있는지" 조차 모르는 경우가 많다. 월 1회 자산 스캔 + 리포트 서비스만으로 월 50–200만원 유지보수 계약이 가능하다.
추가 도구
Shodan.io — 인터넷에 노출된 내 IP·기기 검색(무료 계정으로 자기 자산 확인). Nikto — 웹서버 설정 취약점 스캐너.
Shodan으로 내 노출 자산 확인하기
shodan.io에 로그인 후 검색창에 net:내공인IP대역 을 입력하면 인터넷에 공개적으로 노출된 자신의 장비(공유기, NAS, IP카메라 등)를 확인할 수 있다. 관리자 페이지가 인증 없이 노출돼 있다면 즉시 방화벽 규칙을 수정해야 한다.
네트워크 트래픽 분석 — Wireshark로 이상징후 포착
Wireshark는 내 컴퓨터를 오가는 모든 패킷을 눈으로 보여준다. 악성코드 감염, 비인가 외부 접속, 평문으로 전송되는 비밀번호를 발견하는 가장 확실한 방법이다.
// 유용한 필터 표현식# 암호화되지 않은 HTTP 로그인 폼 데이터 찾기 (자기 네트워크 점검용)
http.request.method == "POST" and http contains "password"
# 비정상적으로 많은 DNS 요청 — 악성코드의 C2 통신 징후
dns and dns.qry.name
# 알려지지 않은 외부 IP로의 지속적 연결 확인
tcp.flags.syn == 1 and tcp.flags.ack == 0
가정에서 바로 적용 가능한 체크리스트
- IoT 기기(스마트플러그, 카메라)가 알 수 없는 해외 서버와 상시 통신하는지 확인
- 공유기 관리자 페이지 접속이 평문 HTTP인지 HTTPS인지 확인 → HTTP면 기본 비밀번호부터 교체
- 공용 와이파이 사용 시 VPN 미사용 상태에서 어떤 정보가 평문 노출되는지 직접 확인해보기(자기 트래픽만)
웹 취약점 — OWASP Top 10 방어자 관점
가장 수요가 높은 보안 스킬은 "공격법"이 아니라 "내 코드가 이 패턴에 취약한지 판별하는 능력"이다. 아래는 실제 코드 리뷰에서 바로 쓸 수 있는 방어 패턴이다.
SQL Injection — 방어 코드
// 절대 이렇게 쓰지 말 것 (문자열 결합)// ❌ 취약: 사용자 입력이 쿼리에 직접 삽입됨
const query = `SELECT * FROM users WHERE email = '${userInput}'`;
// 올바른 방어 — Prepared Statement
// ✅ 안전: 파라미터 바인딩으로 입력값이 데이터로만 취급됨
const query = 'SELECT * FROM users WHERE email = ?';
db.execute(query, [userInput]);
XSS(크로스사이트 스크립팅) — 방어 코드
// ✅ 사용자 입력을 화면에 출력하기 전 반드시 이스케이프
function escapeHtml(str) {
return str.replace(/[&<>"']/g, (c) => ({
'&':'&', '<':'<', '>':'>', '"':'"', "'":'''
}[c]));
}
element.textContent = userInput; // innerHTML 대신 textContent 우선 사용
무료 자동 점검 도구
OWASP ZAP — 자기 소유 웹앱에 대해 자동으로 취약점 스캔. securityheaders.com — 내 도메인의 보안 헤더 설정을 무료로 점검.
돈 아끼는 포인트
배포 전 이 체크리스트만 통과해도 실제 침해사고 대응 비용(평균 수천만원)과 평판 손실을 예방한다. 보험료 개념으로 접근할 것.
인증 · 비밀번호 · 2FA 실전 강화
실제 침해사고의 80% 이상이 취약한 비밀번호 또는 재사용된 비밀번호에서 시작된다. 가장 저비용·고효율 보안 투자는 여기서 나온다.
비밀번호 정책 — 실무 기준
// Node.js — bcrypt로 안전하게 비밀번호 해시 저장const bcrypt = require('bcrypt');
// 저장 시: 평문 비밀번호를 절대 DB에 저장하지 않는다
const hashed = await bcrypt.hash(plainPassword, 12); // cost factor 12 권장
// 검증 시
const isValid = await bcrypt.compare(inputPassword, hashed);
2FA 구현 — TOTP (Google Authenticator 호환)
const speakeasy = require('speakeasy');
// 사용자별 비밀 키 생성
const secret = speakeasy.generateSecret({ name: 'MyApp' });
// 사용자가 입력한 6자리 코드 검증
const verified = speakeasy.totp.verify({
secret: secret.base32,
encoding: 'base32',
token: userInputCode,
window: 1 // 시간 오차 허용 범위
});
피싱 · 소셜엔지니어링 — 패턴 인식 훈련
가장 정교한 방화벽도 사람의 클릭 한 번을 막지 못한다. 소셜엔지니어링은 기술이 아니라 심리 조작 패턴이며, 패턴만 알면 방어율이 급격히 올라간다.
피싱 이메일 판별 5단계 체크리스트
- 발신 도메인 확인 — "naver-security.com" 같이 진짜 도메인과 유사한 가짜 도메인인지 대조
- 긴급성·공포 유발 문구 — "24시간 내 미조치 시 계정 정지" 등은 판단력을 흐리려는 전형적 수법
- 링크 실제 목적지 확인 — 클릭 전 마우스 호버로 실제 URL 미리보기
- 첨부파일 확장자 — .exe, .scr, 매크로 포함 .docm 파일은 특히 주의
- 발신자 채널 이원화 검증 — 이메일로 온 "은행" 요청은 반드시 공식 앱/전화로 재확인
URL 안전성 무료 검증 도구
VirusTotal.com에 의심 URL 붙여넣기 → 70여 개 백신엔진이 동시 검사. Google Safe Browsing 상태도 함께 확인 가능.
기업 대상 수익 모델
모의 피싱 훈련 캠페인(예: GoPhish 오픈소스 활용)을 기획·리포트 제공하는 서비스는 중소기업 대상 월 30–100만원 규모 계약으로 이어진다.
보안 자동화 — 시간과 비용을 아끼는 스크립트
반복적인 보안 점검은 자동화하는 순간 "비용"에서 "자산"이 된다. 아래는 실제로 매일 돌려도 되는 방어형 자동화 스크립트다.
// Python — 자신의 도메인 SSL 인증서 만료일 자동 모니터링import ssl, socket
from datetime import datetime
def check_cert_expiry(hostname, port=443):
ctx = ssl.create_default_context()
with ctx.wrap_socket(socket.socket(), server_hostname=hostname) as s:
s.connect((hostname, port))
cert = s.getpeercert()
expires = datetime.strptime(cert['notAfter'], '%b %d %H:%M:%S %Y %Z')
days_left = (expires - datetime.now()).days
print(f"{hostname}: 인증서 만료까지 {days_left}일 남음")
if days_left < 14:
print("⚠ 경고: 곧 만료됩니다. 갱신 필요")
check_cert_expiry("topeduprep.uk")
// Bash — 서버 무단 로그인 시도 자동 탐지
#!/bin/bash
# 최근 SSH 실패 로그인 상위 IP 집계 (본인 서버 관리용)
grep "Failed password" /var/log/auth.log \
| awk '{print $(NF-3)}' \
| sort | uniq -c | sort -rn | head -10
버그바운티 — 합법적으로 취약점 신고하고 돈 받기
버그바운티는 기업이 공식적으로 허가한 범위 내에서 취약점을 찾아 신고하면 포상금을 지급하는 합법 제도다. HackerOne, Bugcrowd 등 플랫폼이 중개한다.
시작 절차
- HackerOne / Bugcrowd 계정 생성 후 "Scope"(허용 범위)를 반드시 먼저 확인
- 범위 밖(out-of-scope) 자산은 절대 건드리지 않는다 — 규정 위반 시 법적 보호 상실
- PortSwigger Academy에서 취약점 유형별 무료 실습 선행
- 발견 시 재현 절차(PoC)를 명확히 문서화해 신고
- 공개 공표(Disclosure) 전 반드시 기업의 승인 절차를 따른다
| 취약점 등급 | 평균 포상금 범위 | 대표 유형 |
|---|---|---|
| Critical | US$3,000–20,000+ | 원격 코드 실행, 인증 우회 |
| High | US$500–3,000 | 주요 IDOR, 저장형 XSS |
| Medium | US$100–500 | 정보 노출, CSRF |
| Low | US$50–100 | 설정 미비, 배너 정보노출 |
커리어 & 자격증 로드맵
단계별 자격증 경로
| 단계 | 자격증 | 평균 준비기간 | 비고 |
|---|---|---|---|
| 입문 | CompTIA Security+ | 2–3개월 | 보안 기초 전반, 채용 필수요건에 자주 등장 |
| 실무 | eJPT (INE) | 1–2개월 | 실습형 저비용 입문 침투테스트 자격 |
| 중급 | OSCP | 4–6개월 | 업계 최고 신뢰도의 실기형 침투테스트 자격증 |
| 전문 | CISSP | 6개월+ | 보안 관리자·컨설턴트급, 5년 경력 요구 |
무료로 시작하는 학습 경로
- 1개월차 — TryHackMe "Pre Security" 무료 트랙으로 네트워크·리눅스 기초
- 2–3개월차 — PortSwigger Academy로 웹 취약점 실습, DVWA 로컬 구축
- 4–6개월차 — HackTheBox 정기 머신 풀이 + CTF(Capture The Flag) 대회 참가
- 이후 — 버그바운티 실전 투입 또는 Security+ 응시