본문으로 건너뛰기
QA-Lab
중급25

보안 테스트 기초: OWASP Top 10으로 보는 흔한 취약점

보안 전문가가 아니어도, 가장 흔하게 반복되는 취약점 유형을 알면 QA가 최소한의 안전망 역할을 할 수 있다. OWASP Top 10의 대표 항목들을 이해한다.

  • #보안테스트
  • #OWASP
  • #취약점

개념

OWASP Top 10이란

OWASP(Open Worldwide Application Security Project)는 웹 애플리케이션 보안 취약점을 연구하는 비영리 단체다. OWASP Top 10은 실제로 가장 자주, 가장 심각하게 발생하는 취약점 유형 10가지를 정리한 목록으로, 몇 년마다 갱신된다. 보안 전문가가 아닌 QA도 이 목록의 대표 항목 몇 가지를 알면, 최소한의 관점으로 취약점 가능성을 알아챌 수 있다.

인젝션(Injection)

사용자 입력을 제대로 검증하지 않아, 입력값이 명령어의 일부로 실행되어 버리는 취약점이다. 모듈 9(레슨 5)에서 배운 SQL을 떠올려보자.

정상 입력: 검색창에 "노트북" 입력
공격 입력: 검색창에 "'; DROP TABLE users; --" 입력

애플리케이션이 이 입력을 제대로 걸러내지 못하면, 검색창에 입력한 텍스트가 실제 데이터베이스 명령어로 실행되어 데이터가 통째로 삭제될 수도 있다. 모듈 3(레슨 8~9)에서 배운 악성 입력 테스트가 바로 이런 시나리오를 겨냥한 것이다.

손상된 접근 제어(Broken Access Control)

모듈 9(레슨 3)에서 배운 **인가(Authorization)**가 제대로 안 된 경우다.

정상: 내 계정으로 로그인해서 /orders/123(내 주문)을 조회
공격: 로그인은 했지만, URL을 /orders/124(다른 사람 주문)로 바꿔서
      접근했더니 그대로 정보가 보임

이건 모듈 9(레슨 3)의 실습 과제에서 다뤘던 "인가 검사가 프론트엔드에만 있고 서버에는 없는" 문제와 정확히 같은 취약점이다.

취약하고 오래된 컴포넌트 사용

애플리케이션이 쓰고 있는 외부 라이브러리에, 이미 알려진 보안 취약점이 있는 오래된 버전을 그대로 쓰는 경우다. 이건 레슨 6에서 다룰 SCA 도구가 자동으로 찾아주는 영역이다.

암호화 처리 실패

비밀번호나 개인정보를 평문(암호화 안 된 상태)으로 저장하거나, 안전하지 않은 방식으로 전송하는 경우다. 모듈 7(레슨 2)에서 배운 데이터 마스킹 원칙이 여기서도 연결된다 — 테스트 환경뿐 아니라 운영 환경에서도 민감정보 보호가 기본이어야 한다.

보안 설정 오류

기본 관리자 비밀번호를 그대로 쓰거나, 에러 메시지에 시스템 내부 정보(서버 경로, 데이터베이스 종류)가 그대로 노출되는 경우처럼, 설정을 제대로 안 해서 생기는 취약점이다.

안전하지 않은 에러 메시지 예시:
"Error: MySQL connection failed at /var/www/app/db.php line 42"
→ 공격자에게 시스템 구조에 대한 힌트를 그대로 준다

QA가 할 수 있는 최소한의 것

전문 침투 테스트(Penetration Testing)는 별도 전문가의 영역이지만, QA는 기능 테스트를 하면서 다음과 같은 것들을 함께 확인할 수 있다.

  • 다른 사용자의 데이터에 URL 조작으로 접근되지 않는지(접근 제어)
  • 입력창에 특수 문자나 스크립트 코드를 넣었을 때 이상하게 반응하지 않는지(인젝션)
  • 에러 화면에 시스템 내부 정보가 노출되지 않는지(설정 오류)

실무에서 왜 필요한가

보안 사고는 발생 빈도는 낮아도 파급력이 매우 크다 — 개인정보 유출은 법적 책임과 신뢰 손실로 직결된다. 전담 보안팀이 없는 조직에서는 QA가 기능 테스트를 하며 발견하는 "이거 다른 사람 정보가 보이는데요?" 같은 발견이 실질적인 사고를 막는 마지막 방어선이 되기도 한다.

실습 과제

과제 1 — 취약점 유형 분류하기 (10분)

다음 세 발견을 인젝션·손상된 접근 제어·보안 설정 오류 중 어느 유형에 해당하는지 분류한다.

  1. 로그인 실패 시 "비밀번호가 틀렸습니다"가 아니라 데이터베이스 연결 문자열이 그대로 화면에 노출됨
  2. 다른 회원의 주문 번호로 URL을 바꿔 접속하니 그 사람의 배송지 주소가 그대로 보임
  3. 이름 입력란에 특수 문자를 넣었더니 서버 에러가 발생하며 알 수 없는 SQL 구문 일부가 화면에 노출됨

과제 2 — 최소 점검 항목 만들기 (10분)

담당하고 있는(또는 가상의) 서비스에서, 전문 보안팀 없이 QA가 기능 테스트 중 함께 확인할 수 있는 보안 체크리스트 3가지를 작성한다.

자가 체크리스트

  • OWASP Top 10이 무엇이고 왜 참고되는지 설명할 수 있다
  • 인젝션 취약점이 무엇이고 모듈 3의 악성 입력 테스트와 어떻게 연결되는지 설명할 수 있다
  • 손상된 접근 제어가 모듈 9(레슨 3)의 인가 개념과 어떻게 연결되는지 설명할 수 있다
  • QA가 전문가 없이도 확인할 수 있는 최소한의 보안 점검 항목을 나열할 수 있다

흔한 실수

  • 보안은 전적으로 전문가의 영역이라 QA는 신경 쓸 필요 없다고 생각한다. 기능 테스트 중 발견되는 것만으로도 큰 가치가 있다.
  • 에러 메시지에 시스템 정보가 노출되는 것을 "그냥 디버깅에 편리하니까"라고 대수롭지 않게 넘긴다. 공격자에게도 똑같이 유용한 정보다.
  • URL을 바꿔서 다른 사용자 데이터에 접근되는지 한 번도 확인해보지 않는다. 손상된 접근 제어는 가장 흔하면서도 QA가 발견하기 쉬운 취약점 유형이다.

참고 자료