| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- Azure Event Hub
- VM 설치
- 이벤트 허브
- azure
- Windows 가상머신
- mac windows
- ChatGPT
- 맥 윈도우 설치
- intermediate
- Django REST framework
- 실시간 데이터 스트리밍
- Cloud Engineering
- vector embedding
- Azure Function App
- DRF
- Beginner
- Azure 이벤트 허브
- Data Streaming
- Teams Web hook
- Azure OpenAI
- Azure NoSQL
- Azure Cosmos DB
- Azure Cloud
- Event Hub
- LLM
- AI rag
- webhook
- data pipeline
- RAG model
- Python
- Today
- Total
Seum.Lee Story
소프트웨어 개발 보안 구축 핵심 개념 본문
소프트웨어 개발 보안 구축
1. Secure SDLC
보안은 개발이 끝나고 붙이는 패치가 아니다. 요구사항을 정의하는 순간부터 배포 이후까지, 개발 생명 주기 전 단계에 보안을 내재화하는 것이 Secure SDLC의 핵심이다. 나중에 발견된 취약점을 고치는 비용은 설계 단계에서 예방하는 비용의 수십 배에 달한다는 것은 현업에서 자주 체감하는 사실이다.
대표적인 방법론 세 가지가 있다.
| CLASP | Cigital | SDLC 초기 단계 보안 강화에 초점. 역할 기반 활동 정의. |
| SDL | Microsoft | MS 내부에서 출발해 공개된 방법론. 위협 모델링 포함. |
| Seven Touchpoints | Gary McGraw | 모범 사례를 SDLC 7개 접점에 통합. 코드 리뷰·위험 분석 강조. |

2. 보안 요소 (CIA + 인증·부인방지)
현업에서 보안 설계를 논할 때 가장 먼저 나오는 프레임이 CIA Triad다. 여기에 인증과 부인방지를 더하면 보안 요소 전체 그림이 완성된다.

CIA Triad
기밀성 (Confidentiality): 인가된 사용자만 데이터에 접근할 수 있어야 한다. 전송 중 패킷이 탈취되더라도 암호화가 되어 있으면 내용을 읽을 수 없다. HTTPS, VPN이 이 원칙을 구현한 대표적인 기술이다.
무결성 (Integrity): 데이터가 인가되지 않은 방식으로 수정되어서는 안 된다. 해시값 비교나 디지털 서명이 대표적인 구현 방법이다. 파일을 배포할 때 SHA-256 해시를 함께 공개하는 관행이 바로 이 원칙을 따른 것이다.
가용성 (Availability): 인가된 사용자는 필요할 때 언제든 정보와 자원을 사용할 수 있어야 한다. DDoS 공격이 가용성을 노리는 대표적인 위협이다.
인증과 부인방지
인증(Authentication)은 접속한 주체가 정말 그 사람인지 확인하는 행위다. 인증 방식은 다섯 가지 기반으로 분류된다.
- 지식 기반: 비밀번호, PIN처럼 "알고 있는 것"
- 소유 기반: OTP 토큰, 스마트카드처럼 "가지고 있는 것"
- 생체 기반: 지문, 홍채처럼 "나 자신인 것"
- 위치 기반: 특정 IP 대역, 국가처럼 "있는 위치"
- 행위 기반: 서명 패턴, 타이핑 리듬처럼 "행동 방식"
부인방지(Non-repudiation)는 송신자나 수신자가 나중에 "나는 그런 적 없다"고 발뺌하지 못하도록 증거를 남기는 것이다. 전자서명이 가장 전형적인 구현이다.
3. 시큐어 코딩
보안 취약점의 상당수는 애플리케이션 코드 레벨에서 비롯된다. 시큐어 코딩은 이 취약점을 코드 작성 단계에서 예방하는 실천이다.
입력 데이터 검증 관련 취약점
외부에서 들어오는 모든 입력은 잠재적으로 악의적일 수 있다는 전제로 코드를 작성하는 것이 기본이다.
경로 순회 (Path Traversal): ../ 같은 상대 경로 기호를 악용해 허가되지 않은 파일에 접근하는 공격이다. 예를 들어 파일 다운로드 기능에서 파일명 파라미터를 그대로 경로에 사용하면 서버의 /etc/passwd까지 노출될 수 있다.
# 취약한 코드: 입력값을 그대로 경로에 사용
filename = request.args.get('file')
with open(f"/var/uploads/{filename}") as f: # ../../../etc/passwd 가능
return f.read()
# 개선: 경로를 정규화하고 허용 디렉토리 내인지 검증
import os
base_dir = "/var/uploads"
filename = request.args.get('file')
safe_path = os.path.realpath(os.path.join(base_dir, filename))
if not safe_path.startswith(base_dir):
abort(403)
SQL 삽입 (SQL Injection): 입력값에 SQL 구문을 섞어 DB를 조작하거나 인증을 우회하는 공격이다. 실무에서 여전히 OWASP Top 10에 빠지지 않는 단골 취약점이다.
# 취약한 코드: 문자열 포매팅으로 쿼리 조합
query = f"SELECT * FROM users WHERE id='{user_id}'" # ' OR '1'='1 삽입 가능
# 개선: 파라미터 바인딩 사용
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
XSS (Cross-Site Scripting): 악의적인 스크립트를 웹 페이지에 삽입해 다른 사용자의 브라우저에서 실행시키는 공격이다. 세션 쿠키 탈취, 피싱 페이지 삽입 등에 활용된다.
# 취약한 코드: 사용자 입력을 HTML에 그대로 출력
return f"<p>안녕하세요, {username}</p>" # <script>alert(1)</script> 삽입 가능
# 개선: 출력 시 HTML 이스케이프 처리
from markupsafe import escape
return f"<p>안녕하세요, {escape(username)}</p>"
메모리 버퍼 오버플로: 할당된 메모리 범위를 넘어 데이터를 쓸 때 발생한다. C/C++ 환경에서 자주 나타나며, 공격자가 이를 이용해 임의 코드를 실행시킬 수 있다. Python, Java 등 메모리 관리 언어를 사용하면 이 위험이 크게 줄어든다.
보안 기능 관련 취약점
하드 코딩: API 키, DB 패스워드, 암호화 키를 소스코드에 직접 쓰는 관행이다. 코드가 깃허브에 올라가는 순간 탈취 위험이 생긴다. 환경변수나 시크릿 관리 서비스(AWS Secrets Manager, HashiCorp Vault 등)로 분리하는 것이 올바른 방향이다.
# 권장하지 않는 방식
DB_PASSWORD = "super_secret_123"
# 권장 방식: 환경변수에서 읽기
import os
DB_PASSWORD = os.environ.get("DB_PASSWORD")
TOCTOU (Time Of Check To Time Of Use) 경쟁 조건: 파일 존재 여부를 검사(Check)한 시점과 실제 사용(Use) 시점 사이의 간격을 파고드는 취약점이다. 멀티스레드 환경이나 공유 자원 접근 시 빈번하게 나타난다.
널 포인터 역참조: 널 포인터가 가리키는 메모리 위치에 접근하면 프로그램이 충돌하거나 예측 불가능한 동작이 발생한다. 반드시 널 체크를 선행하는 습관이 중요하다.
스택 가드: 버퍼 오버플로 공격을 탐지하기 위한 방어 기법이다. 복귀 주소와 변수 사이에 특정 카나리(canary) 값을 넣어두고, 이 값이 변조되면 오버플로우로 판단해 실행을 중단한다.
접근 제어자 범위: public → protected → default → private 순으로 접근 범위가 좁아진다. 실무에서는 정보 은닉 원칙에 따라 가능한 한 좁은 접근 범위를 선택하는 편이 안전하다.
4. 암호화

개인키(대칭키) 암호화
암호화와 복호화에 동일한 키를 쓴다. 속도가 빠르고 구현이 단순하지만, 키를 안전하게 전달하는 문제(키 배포 문제)가 있다. 대량 데이터 암호화에 주로 쓰인다.
암호화 방식은 처리 단위에 따라 두 가지로 나뉜다.
스트림 방식: 평문과 동일한 길이의 키스트림을 생성해 비트 단위로 XOR 연산한다. 실시간 통신에 적합하다. 대표 알고리즘으로 LFSR, RC4가 있다.
블록 방식: 데이터를 고정 크기 블록으로 나눠 한 블록씩 암호화한다. 대표 알고리즘은 아래와 같다.
| DES | 미국 NBS | 1975 | 64비트 키 | 현재는 취약. 3DES로 보완했으나 느림. |
| SEED | KISA | 1999 | 128비트 키 | 국내 표준 블록 암호 |
| AES | 미국 NIST | 2001 | 128/192/256비트 키 | 현재 가장 널리 쓰이는 표준 |
| ARIA | 국정원+산학연 | 2004 | AES 규격 준용 | 국내 표준, 경량 환경에 적합 |
알고리즘 제안 주체 연도 키/블록 크기 비고
AES는 현재 사실상의 글로벌 표준이다. 신규 시스템을 설계할 때 특별한 이유가 없다면 AES-256을 기준으로 삼는 것이 일반적이다.
공개키(비대칭키) 암호화
공개키로 암호화하고 개인키로 복호화한다. 키 배포 문제를 해결하지만, 대칭키 방식에 비해 연산이 훨씬 느리다. 그래서 실제 데이터 암호화보다는 대칭키를 안전하게 교환하거나 전자서명을 생성하는 용도로 주로 쓰인다.
RSA: 라이베스트, 샤미르, 애들먼이 개발한 공개키 알고리즘이다. 큰 수의 소인수분해가 현실적으로 어렵다는 수학적 난제를 기반으로 한다. 현재도 TLS 핸드셰이크, 전자서명에 광범위하게 사용된다.
해시
입력 데이터를 고정 길이의 값으로 변환한다. 단방향 함수이므로 복호화가 불가능하다. 데이터 무결성 검증, 패스워드 저장에 활용된다.
| MD5 | 128비트 | 1991년 라이베스트 개발. 충돌 취약점 발견으로 보안 용도로는 권장하지 않음. |
| SHA-256 / SHA-512 | 256 / 512비트 | NSA·NIST 발표. 현재 가장 많이 쓰이는 해시 계열. |
| N-NASH | 128비트 | 일본 NTT 발표. |
| SNEFRU | 가변 | 머클이 1990년 발표. 32비트 프로세서 최적화. |
알고리즘 출력 크기 비고
패스워드를 저장할 때 MD5나 SHA-1을 단순히 적용하는 것은 권장하지 않는다. 레인보우 테이블 공격에 취약하기 때문이다. bcrypt, Argon2, PBKDF2처럼 솔트(salt)와 반복 연산을 적용한 알고리즘을 쓰는 편이 현재 기준에 맞다.
무선 보안 프로토콜
WEP → TKIP(WPA) → WPA2 순으로 보안 수준이 높아졌다.
- WEP: 초기 무선랜 보안 프로토콜. 취약점이 많아 현재는 사용하지 않는다.
- TKIP: WEP의 취약점을 보완한 데이터 보안 프로토콜. WPA에 사용됨.
- WPA2: 현재 표준. AES 기반 CCMP 암호화를 사용한다.
5. 보안 아키텍처와 솔루션
실무에서는 단일 보안 제품 하나로 모든 위협을 막을 수 없다. 여러 보안 솔루션을 계층적으로 배치하는 심층 방어(Defense in Depth) 전략이 현실적인 접근이다.
주요 보안 솔루션
방화벽 (Firewall): 네트워크 경계에서 트래픽을 필터링한다. 허용할 IP와 포트를 정의하고, 그 외는 차단한다. 하지만 허용된 포트를 통한 애플리케이션 레이어 공격(예: HTTP를 통한 SQL 인젝션)은 막지 못한다.
침입 탐지 시스템 (IDS): 공격을 탐지하지만 자동 차단은 하지 않는다. 두 가지 방식이 있다.
- 오용 탐지: 알려진 공격 패턴(시그니처)과 비교해 탐지한다. 알려지지 않은 공격(제로데이)은 놓칠 수 있다.
- 이상 탐지: 정상 상태 기준선을 설정하고 벗어난 행동을 탐지한다. 오탐율이 높을 수 있다.
침입 방지 시스템 (IPS): IDS에 자동 차단 기능을 더한 것이다. 비정상 트래픽을 능동적으로 격리한다. "방화벽 + IDS"의 조합으로 이해하면 편하다.
웹 방화벽 (WAF): SQL 인젝션, XSS 등 웹 계층 공격에 특화된 방화벽이다. 일반 방화벽이 놓치는 HTTP 레이어 공격을 잡아낸다.
VPN: 공중망 인터넷을 통해 암호화된 사설 터널을 구성한다. 재택근무 환경에서 사내망 접근에 광범위하게 쓰인다.
NAC (Network Access Control): 내부망에 접속하는 단말의 MAC 주소를 등록·관리해 비인가 단말의 접속을 차단한다.
DLP (Data Loss Prevention): 내부 데이터가 외부로 유출되는 것을 감지하고 차단한다. 이메일, USB, 클라우드 업로드 경로를 모니터링한다.
ESM (Enterprise Security Management): 여러 보안 장비에서 발생하는 로그와 이벤트를 통합 관리하는 플랫폼이다. 개별 장비를 각각 들여다보는 것보다 상관 분석이 가능해 위협 탐지 정확도가 높아진다.
AAA: 보안 접근 통제의 세 가지 핵심 기능이다.
- 인증 (Authentication): 본인 확인
- 인가 (Authorization): 권한 부여
- 과금 (Accounting): 접근 기록과 자원 사용 추적
ISMS (정보보호관리체계): 조직의 정보 자산을 안전하게 보호하기 위한 절차와 대책의 체계다. 국내에서는 KISA가 운영하며, ISO 27001을 기반으로 한다.
6. 주요 공격 기법
서비스 거부 공격 (DoS / DDoS)
서비스를 정상적으로 제공하지 못하도록 가용성을 공격하는 방식이다.
| Ping of Death | ICMP 패킷 크기를 허용 범위 이상으로 전송해 시스템 충돌 유발 |
| Smurf Attack | 출발지 IP를 피해자로 위조한 ICMP 브로드캐스트로 대량 응답 집중 |
| SYN Flooding | TCP 3-way 핸드셰이크를 미완성 상태로 방치해 연결 자원 소진 |
| TearDrop | IP 단편화 오프셋을 변조해 재조합 과정에서 과부하 발생 |
| LAND Attack | 송신·수신 IP를 동일하게 설정해 무한 응답 루프 유발 |
| DDoS | 봇넷(좀비 PC 집합)을 이용해 여러 지점에서 동시 공격. Trin00, TFN, TFN2k, Stacheldraht 등의 툴 활용. |
공격 원리
SYN Flooding은 현업에서도 자주 접하는 공격이다. 이에 대응하기 위한 SYN Cookie, Rate Limiting 설정을 서버 운영 시 기본으로 챙기는 편이 좋다.
세션·네트워크 탈취 공격
세션 하이재킹: 클라이언트와 서버 사이의 세션을 가로채는 공격이다. TCP 3-way 핸드셰이크 과정에 끼어드는 TCP 세션 하이재킹이 대표적이다. 세션 토큰을 탈취하거나 시퀀스 번호를 예측해 세션을 강탈한다.
ARP Spoofing: ARP는 IP 주소를 MAC 주소로 변환하는 프로토콜인데, 이 과정에서 자신의 MAC 주소를 공격 대상인 것처럼 위조해 트래픽을 가로채는 공격이다. 같은 네트워크 내 중간자 공격(MITM)의 전형적인 수단이다.
스니핑: 네트워크를 지나는 패킷을 수동적으로 도청한다. 암호화되지 않은 프로토콜(HTTP, FTP, Telnet)은 스니핑에 취약하다. HTTPS, SSH, SFTP를 쓰는 이유 중 하나가 여기 있다.
악성코드·사회공학 공격
랜섬웨어: 내부 파일을 암호화한 뒤 복호화 대가로 금전을 요구한다. 백업과 오프라인 복사본이 현재로서 가장 현실적인 대응책이다.
백도어: 개발자나 공격자가 정상 인증 절차를 우회해 시스템에 접근하도록 숨겨둔 통로다. 탐지 방법으로는 무결성 검사, 열린 포트 확인, 로그 분석, SetUID 파일 검사가 있다.
워터링 홀: 공격 대상이 자주 방문하는 웹사이트를 미리 감염시켜 방문자를 감염시키는 방식이다. 표적 집단의 행동 패턴을 사전에 연구한다는 점에서 정교한 APT 공격에 자주 활용된다.
APT (Advanced Persistent Threat): 특정 조직을 목표로 장기간에 걸쳐 조직적으로 침투하는 공격이다. 단발성 공격이 아니라 정찰, 침투, 내부 이동, 정보 탈취까지 단계적으로 진행한다.
키로거: 키보드 입력을 몰래 기록해 패스워드, 카드 번호 등 민감한 정보를 탈취한다.
기타 공격·취약점 용어
| 스미싱 | SMS + 피싱. 문자 링크로 악성 앱 설치 유도. |
| 스피어 피싱 | 특정 대상을 선정해 지속적으로 맞춤형 이메일 발송. |
| 큐싱 | QR코드 + 피싱. QR 스캔 시 악성 사이트로 유도. |
| 브루트 포스 | 가능한 모든 값을 대입해 패스워드를 찾는 무차별 공격. |
| 크리덴셜 스터핑 | 이미 유출된 계정 정보를 다른 서비스에 무작위 대입. |
| 제로데이 공격 | 취약점이 공개되기 전에 이미 해당 취약점을 악용하는 공격. |
| 트로이 목마 | 정상 프로그램으로 위장한 악성코드. 사용자가 직접 실행. |
| 웜 | 자가 복제하며 네트워크를 통해 스스로 전파하는 악성코드. |
| 멀버타이징 | 정상 광고 네트워크에 악성 코드를 심어 배포하는 방식. |
| 공급망 공격 | 소프트웨어 공급망에 침투해 악성코드를 정상 배포물에 삽입. |
| 데이터 디들링 | 처리될 데이터를 처리 전에 몰래 변조하는 방식. |
| POODLE | TLS 연결을 SSL 3.0으로 강제 다운그레이드 후 취약점 악용. |
| DDE 취약점 | 오피스 문서에 포함된 DDE 프로토콜을 통한 악성코드 실행. |
용어 설명
7. 보안 관련 기타 개념
보안 아키텍처: 보안 요소들 간의 관계와 구조를 정의한 설계 체계다. 어떤 보안 통제를 어떤 계층에 적용할지 그림을 그리는 작업이다.
보안 프레임워크: 안전한 정보 시스템 환경을 유지하기 위한 체계적 틀이다. ISO 27001, BS7799가 대표적이다.
EDR (Endpoint Detection and Response): 엔드포인트(PC, 서버 등)에서 발생하는 위협을 모니터링하고 대응한다. 기존 백신과 달리 행위 기반으로 탐지하므로 알려지지 않은 위협에도 반응한다.
TMS (Threat Management System): 전사적 IT 인프라에 대한 위협 정보를 통합 관리하는 시스템이다.
DTLS: UDP 기반 통신에 SSL/TLS와 유사한 보안 기능을 제공한다. VoIP나 게임처럼 실시간성이 중요한 UDP 통신에 적합하다.
비트 로커 (BitLocker): 윈도우 전용 볼륨 암호화 기능이다. TPM(신뢰 플랫폼 모듈) 칩과 AES-128을 결합해 디스크 전체를 암호화한다. 분실된 노트북의 데이터를 보호하는 데 효과적이다.
CC (Common Criteria) 인증: 정보보안 제품의 보안 기능을 국제적으로 평가하는 기준이다. EAL 1~7 등급으로 나뉜다.
ISAC (정보공유분석센터): 산업별 사이버 위협 정보를 공유하고, 실시간 경보 및 분석 체계를 운영하는 기관이다.
BCP (Business Continuity Planning): 재해·장애 상황에서도 비즈니스를 지속하기 위한 계획이다. RTO(목표 복구 시간), RPO(목표 복구 시점), BIA(업무 영향 분석)를 기반으로 수립한다.
봇넷(C&C 구조): 악성코드에 감염된 좀비 PC들을 C&C(Command and Control) 서버가 원격 조종하는 구조다. DDoS 공격, 스팸 발송, 크리덴셜 스터핑 등에 활용된다.
부록 — 암호화 알고리즘 한눈에 비교
대칭키 vs 비대칭키 vs 해시
| 대칭키 | 하나의 키 | 가능 | 대량 데이터 암호화 | AES, DES, SEED, ARIA |
| 비대칭키 | 공개키 + 개인키 쌍 | 가능 (개인키로) | 키 교환, 전자서명 | RSA |
| 해시 | 없음 | 불가 (단방향) | 무결성 검증, 패스워드 저장 | SHA-256, MD5 |
구분 키 구조 복호화 가능 주요 용도 대표 알고리즘
보안 솔루션 계층 배치
| 계층 | 솔루션 | 핵심 역할 |
| 경계 (Perimeter) | 방화벽 (Firewall) | 허가되지 않은 네트워크 접근을 IP/Port 기반으로 차단 |
| 애플리케이션 (App) | IPS / WAF | 패킷 침입 탐지 및 웹 애플리케이션 취약점 공격 방어 |
| 접근 제어 (Access) | NAC | 네트워크 접속 단말의 무결성 검증 및 인증 관리 |
| 엔드포인트 (Endpoint) | EDR | 단말 내부의 이상 행위 모니터링 및 실시간 위협 대응 |
| 통합 관제 (Monitoring) | ESM / SIEM | 분산된 보안 로그를 통합하여 상관관계 분석 및 경보 |

공격 유형 분류 요약

| 공격 목표 | 주요 공격 기법 | 설명 |
| 가용성 파괴 | DoS / DDoS | 서비스에 과부하를 주어 정상 사용자가 이용하지 못하게 함 |
| 기밀성 침해 | 스니핑, ARP Spoofing, 세션 하이재킹 | 데이터 흐름을 도청하거나 세션을 탈취하여 정보를 훔침 |
| 무결성 침해 | 데이터 디들링, SQL 인젝션 | 데이터를 악의적으로 변조하거나 잘못된 데이터로 조작함 |
| 인증 우회 | 크리덴셜 스터핑, 브루트 포스 | 계정 정보를 탈취하거나 무작위 대입으로 로그인을 시도함 |
| 지속 접근 | 백도어, APT, 공급망 공격 | 침투 후 몰래 장기간 상주하며 시스템 통제권을 유지함 |
| 금전 탈취 | 랜섬웨어, 피싱 | 데이터를 인질로 잡거나 사용자를 속여 직접적인 이득을 취함 |