본문 바로가기

⚠️ 취약한 API 사용 - 실습 시뮬레이터

CWE-477/676: Use of Obsolete/Dangerous Function

KISA 소프트웨어 보안약점 진단가이드(2021) · API 오용
💡 쉽게 말하면
낡고 위험한 도구(Random·os.system)를 쓰면 예측·명령 주입 공격에 뚫립니다. 안전한 대체(SecureRandom·ProcessBuilder)를 씁니다.
✅ 학습 진행도
  • ⬜ 진단 시작
  • ⬜ 위험 API 식별
  • ⬜ 안전 API 전환
☕ Java 코드 에디터 취약한 코드
Util.java 💡 예측가능 Random/문자열 exec 대신 SecureRandom과 ProcessBuilder를 쓰세요.
// [취약] 보안에 부적합한 API: 예측가능 Random, 문자열 exec(셸 인젝션)
Random rnd = new Random();
String token = Long.toHexString(rnd.nextLong());
Runtime.getRuntime().exec("sh -c 'backup " + name + "'");
💡 수정 가이드 (KISA 기준)
1. 안전한 API

SecureRandom + ProcessBuilder.

SecureRandom rnd = new SecureRandom(); String token = Long.toHexString(rnd.nextLong()); new ProcessBuilder("backup", name).start(); // 인자 분리(셸 미경유)
📊 분석 결과 및 설명
🎯 목표

보안에 부적합한 오래된/위험한 API를 안전한 대체 API로 교체합니다.

⚠️ 현재 취약점

Dangerous API Use

예측가능 난수/문자열 exec로 토큰 예측·명령 주입이 가능합니다.

✅ 학습 진행도
  • ⬜ 진단 시작
  • ⬜ 위험 API 식별
  • ⬜ 안전 API 전환
🐍 Python 코드 에디터 취약한 코드
util.py 💡 random/os.system 대신 secrets와 subprocess.run(리스트)을 쓰세요.
import random, os
# [취약] 보안 부적합 API: random(예측가능), os.system(셸 인젝션)
token = str(random.random())
os.system("backup " + name)
💡 수정 가이드 (KISA 기준)
1. 안전한 API

secrets + subprocess.run 리스트.

import secrets, subprocess token = secrets.token_hex(16) subprocess.run(["backup", name], check=True) # 인자 리스트(셸 미경유)
📊 분석 결과 및 설명
🎯 목표

위험한 표준 API를 보안에 적합한 대체 API로 교체합니다.

⚠️ 현재 취약점

Dangerous API Use

예측가능 난수/os.system으로 토큰 예측·명령 주입이 가능합니다.

📰 실제 사고사례 & 표준 매핑
폐기·취약한 API 사용은 알려진 결함을 그대로 떠안아 공격에 노출됩니다.
🏷️ CWE-477
※ 공개적으로 알려진 사례 기반 교육용 요약 · CWE/OWASP는 공개 표준 분류