본문 바로가기

OWASP Top 10 취약점 중 3가지와 대응 방안

액트 2025. 3. 24.
반응형

OWASP란?

OWASP(Open Web Application Security Project)는 웹 애플리케이션 보안 강화를 위한 글로벌 비영리 단체입니다.
이 단체는 웹에서 가장 흔하고 위험한 보안 취약점 10가지를 정리하여 발표합니다. 이를 OWASP Top 10이라고 합니다.

2025년, 새로운 OWASP Top 10 개정 리스트가 발표될 예정입니다.

해당 리스트가 공개되면, 변경된 항목과 보안 트렌드에 대한 분석 포스팅도 빠르게 준비해 공유드리겠습니다.

OWASP Top 10 목록 (2021년 기준)

  1. A01:2021 – 취약한 접근 제어(Broken Access Control)
  2. A02:2021 – 암호화 실패(Cryptographic Failures)
  3. A03:2021 – 주입(Injection)
  4. A04:2021 – 안전하지 않은 설계(Insecure Design)
  5. A05:2021 – 잘못된 보안 설정(Security Misconfiguration)
  6. A06:2021 – 취약하고 오래된 구성요소(Vulnerable and Outdated Components)
  7. A07:2021 – 인증 및 식별 실패(Identification and Authentication Failures)
  8. A08:2021 – 소프트웨어 및 데이터 무결성 실패(Software and Data Integrity Failures)
  9. A09:2021 – 보안 로깅 및 모니터링 실패(Security Logging and Monitoring Failures)
  10. A10:2021 – 서버사이드 요청 위조(SSRF: Server-Side Request Forgery)

오늘은 이 중에서 3가지 취약점과 대응 방안을 자세히 알아보겠습니다.

1. 주입(Injection) 취약점

주입(Injection) 취약점이란?

사용자의 입력 값이 검증 없이 SQL, OS 명령어, LDAP 쿼리 등에 삽입되어 악용되는 보안 취약점입니다.
대표적인 공격으로 SQL Injection, Command Injection, XSS(Cross-Site Scripting) 등이 있습니다.

⚠ 주입 공격 예제 (SQL Injection)

공격자가 다음과 같은 SQL 코드를 입력한다고 가정합니다.

sql
' OR '1'='1';

💡 정상적인 로그인 쿼리

sql
SELECT * FROM users WHERE username = 'admin' AND password = 'password123';

💡 공격자가 위와 같은 입력을 하면 쿼리가 다음과 같이 변형됨

sql
SELECT * FROM users WHERE username = '' OR '1'='1';

➡ 1=1은 항상 참(True)이므로 모든 사용자 정보가 조회됨 (해킹 성공 🚨)

🛡 대응 방안 (주입 공격 방어법)

입력값 검증: Prepared Statement 또는 ORM(Object-Relational Mapping) 사용
화이트리스트 기반 입력 필터링
웹 애플리케이션 방화벽(WAF) 사용

📌 안전한 SQL 코드 (Prepared Statement 사용 예제 - Python)

python
cursor.execute("SELECT * FROM users WHERE username = ? AND password = ?", (user_input, password))

 

2. 취약한 접근 제어(Broken Access Control)

취약한 접근 제어란?

인증되지 않은 사용자가 허용되지 않은 기능이나 데이터에 접근할 수 있는 취약점입니다.
예를 들어 관리자만 볼 수 있는 페이지에 일반 사용자가 접근할 수 있다면 취약한 접근 제어 문제입니다.

⚠ 취약한 접근 제어 공격 예제

관리자 페이지에 대한 URL이 다음과 같다고 가정합니다.

arduino
https://example.com/admin

공격자는 로그인하지 않고 직접 이 URL을 입력하여 접근을 시도할 수 있습니다.

🛡 대응 방안 (접근 제어 강화법)

권한 체크 강화: 페이지마다 role-based access control (RBAC) 적용
URL 직접 접근 방지: 백엔드에서 사용자 권한을 확인하는 로직 추가
세션 타임아웃 설정: 장기간 로그인 유지 방지

📌 보안 코드 예제 (권한 체크 - Python Flask)

python
@app.route('/admin') @login_required def admin_panel(): if current_user.role != 'admin': abort(403) # 403 Forbidden 에러 반환 return render_template('admin.html')

3. 보안 설정 오류(Security Misconfiguration)

보안 설정 오류란?

보안이 제대로 설정되지 않아 공격자가 민감한 정보에 접근하거나 시스템을 조작할 수 있는 취약점입니다.
예를 들어, 디버그 모드 활성화, 기본 계정 사용, 불필요한 서비스 노출 등이 포함됩니다.

⚠ 보안 설정 오류 사례

💀 기본 관리자 계정 노출:

  • admin / admin 같은 기본 아이디와 비밀번호 사용
  • 공격자가 이를 이용해 시스템에 로그인 가능

💀 디버그 모드 활성화:

  • DEBUG=True 설정이 남아있어 내부 오류 메시지가 노출됨

🛡 대응 방안 (보안 설정 강화법)

기본 계정 삭제 및 강력한 비밀번호 설정
디버그 모드 비활성화 (DEBUG=False)
불필요한 서비스 및 포트 차단
자동 보안 업데이트 적용

📌 보안 설정 예제 (Django의 settings.py 수정)

python
DEBUG = False # 개발 환경에서만 True, 운영 환경에서는 False ALLOWED_HOSTS = ['yourdomain.com']

결론: OWASP Top 10을 알고 보안 강화하자!

웹 애플리케이션은 다양한 보안 취약점에 노출될 수 있으며, 예방이 가장 중요합니다.
오늘 다룬 주입 공격, 접근 제어 문제, 보안 설정 오류는 가장 흔한 보안 문제이므로, ✅ 입력값 검증, ✅ 권한 체크, ✅ 보안 설정 강화 등의 방법으로 대응해야 합니다.

반응형

댓글