인터페이스 테스트
IT 위키
더 많은 작업
- Interface Testing; 인터페이스 테스트, API 테스트
- 시스템이 사람·다른 시스템·네트워크와 만나는 지점(사용자 인터페이스, 네트워크 인터페이스, API)이 올바른 입력만 받아들이고, 오류를 안전하게 처리하며, 인증·인가를 우회당하지 않고, 필요 이상의 데이터를 내보내지 않는지 확인하는 테스트
공격은 거의 언제나 인터페이스를 통해 들어온다. 웹 화면의 입력란, 모바일 앱이 부르는 API, 장비 사이의 프로토콜, 관리용 포트가 모두 공격 표면이다. 그래서 CISSP 6.2는 인터페이스 테스트를 별도 항목으로 두고 사용자 인터페이스, 네트워크 인터페이스, API를 예로 든다. 기능 테스트에서 말하는 인터페이스 테스트가 "두 구성 요소가 약속대로 데이터를 주고받는가"를 본다면, 보안 관점의 인터페이스 테스트는 "약속을 어기는 입력과 호출이 들어왔을 때 안전하게 실패하는가"를 본다.
인터페이스를 설계 단계에서 어떻게 보호하는지는 인터페이스 보안과 API 보안 문서에서 다루고, 이 문서는 그 통제가 실제로 작동하는지 시험하는 방법에 집중한다.
| 유형 | 대상 예 | 주요 시험 항목 |
|---|---|---|
| 사용자 인터페이스(UI) | 웹 화면, 모바일 앱 화면, 관리 콘솔, 키오스크 | 클라이언트 쪽 검증만 믿는지(숨은 필드·비활성 버튼 조작), 화면에서 숨긴 기능이 서버에서도 막히는지, 오류 메시지의 정보 노출, 세션 처리, 클릭재킹 방어 |
| 네트워크 인터페이스 | 열린 포트, 서비스 프로토콜, 관리 인터페이스(SSH, SNMP, 웹 관리 화면), 장비 간 통신 | 불필요한 서비스 노출, 기본 계정, 평문 프로토콜, 비정상 패킷 처리, 관리 인터페이스의 접근 제한(포트 스캔, 프로토콜 퍼징) |
| API | REST, GraphQL, SOAP, gRPC, 메시지 큐, 내부 마이크로서비스 API | 객체 수준·기능 수준 인가, 인증 토큰 검증, 과도한 데이터 응답, 요청량 제한, 스키마 밖 입력, 문서화되지 않은 엔드포인트 |
| 내부 구성 요소 간 인터페이스 | 라이브러리 호출, 플러그인, 파일 교환, 하드웨어 인터페이스(디버그 포트) | 신뢰 경계를 넘는 데이터의 검증 여부, 디버그 기능 잔존 |
| 관점 | 확인할 내용 | 실패 예 |
|---|---|---|
| 입력 검증 | 형식·길이·범위·문자 집합을 서버에서 허용 목록 방식으로 검증하는가 | SQL 인젝션, 명령 삽입, 경로 조작, 버퍼 넘침 |
| 오류 처리 | 예외 상황에서 안전한 상태로 실패(fail secure)하고 내부 정보를 숨기는가 | 스택 추적·SQL 문·내부 IP 노출, 오류 시 인증 생략 |
| 인증 우회 | 모든 엔드포인트가 인증을 요구하는가, 토큰의 서명·만료·대상을 검증하는가 | 인증 없이 호출되는 내부 API, 서명 검증을 하지 않는 토큰 |
| 인가 우회 | 다른 사용자의 객체 ID로 요청하면 거부되는가, 일반 사용자가 관리자 기능을 부를 수 있는가 | 객체 수준 인가 실패(BOLA), 기능 수준 인가 실패 |
| 데이터 노출 | 응답에 화면에 필요 없는 필드(개인정보, 내부 상태)가 들어 있지 않은가 | 클라이언트에서 걸러 낼 것이라 믿고 전체 객체를 반환 |
| 자원 소비 | 요청 횟수·크기·페이지 수 제한이 있는가 | 대량 호출로 서비스 거부나 비용 폭증 |
OWASP API Security Top 10(2023)은 객체 수준 인가 실패(API1), 인증 실패(API2), 객체 속성 수준 인가 실패(API3), 제한 없는 자원 소비(API4), 기능 수준 인가 실패(API5) 등을 API의 주요 위험으로 꼽는다. 인터페이스 테스트 항목을 정할 때 좋은 점검표가 된다.
| 방법 | 내용 | 잘 찾는 결함 |
|---|---|---|
| 퍼징(fuzzing) | 형식이 깨졌거나 무작위·극단적인 입력을 대량으로 보내 비정상 동작을 관찰한다. 프로토콜·파일 형식·API 스키마를 알고 변형하는 방식이 효과적이다 | 충돌, 메모리 오류, 예외 처리 누락, 입력 검증 누락 |
| 경계값 분석 | 허용 범위의 경계와 그 바로 밖의 값(0, -1, 최대값+1, 빈 값, 매우 긴 문자열)을 넣는다 | 정수 넘침, 범위 검증 누락, 음수 금액 |
| 계약 테스트(contract testing) | 제공자와 소비자가 합의한 요청·응답 형식(계약)을 양쪽이 지키는지 자동으로 확인한다 | 응답에 계약 밖 필드가 추가되는 데이터 노출, 하위 호환성이 깨지는 변경 |
| API 스키마 검증 | OpenAPI·WSDL·GraphQL 스키마 등 명세와 실제 동작을 대조하고, 스키마 밖의 필드·형식이 거부되는지 본다 | 대량 할당(mass assignment), 문서화되지 않은 엔드포인트, 형식 검증 누락 |
| 인가 매트릭스 테스트 | 역할별 계정으로 모든 엔드포인트를 호출해 허용·거부 결과를 표로 비교한다 | 수평·수직 권한 상승 |
| 부정 테스트(negative testing) | 잘못된 순서, 중복 호출, 누락된 매개변수처럼 일부러 규칙을 어긴다 | 업무 흐름 우회, 경쟁 상태 |
자동 방법(퍼징, 스키마 검증, 계약 테스트)은 CI/CD 파이프라인에 넣어 배포마다 돌리고, 인가 매트릭스와 업무 흐름 테스트는 오용 사례를 바탕으로 사람이 설계한다.
| 분류 | 도구 예 | 용도 |
|---|---|---|
| 웹·API 프록시 | OWASP ZAP, Burp Suite | 요청 가로채기·변조, 자동 스캔, 퍼징 |
| API 테스트 | Postman, 스키마 기반 퍼저 | 시나리오 호출, 응답 검증, 스키마 기반 변형 입력 |
| 네트워크·프로토콜 | Nmap, 프로토콜 퍼저 | 포트·서비스 식별, 프로토콜 이상 입력 |
| 브라우저 자동화 | Selenium, Playwright | UI 경로의 반복 시험, 클라이언트 검증 우회 확인 |
도구 이름은 예시일 뿐이며 특정 제품을 고르는 것이 시험의 관심사는 아니다.
- 인터페이스 테스트는 사용자 인터페이스, 네트워크 인터페이스, API를 모두 포함한다.
- 클라이언트 쪽 검증은 사용성 기능일 뿐 보안 통제가 아니다. 서버 쪽에서 다시 검증하는지를 시험한다.
- 오류가 났을 때는 안전한 상태로 실패해야 한다(fail secure). 오류 메시지에 내부 정보가 보이면 결함이다.
- API에서 가장 흔한 결함은 인가 실패이다. "인증된 사용자가 다른 사용자의 데이터를 조회"하는 시나리오는 객체 수준 인가를 시험해 찾는다.
- 퍼징은 예상하지 못한 입력에 대한 견고성을, 경계값 분석은 범위 검증을 시험한다.