1. 보안성 테스트 (Security Test)의 개념 및 부특성
(1) 보안성 테스트의 개념
- 시스템이 정보 및 데이터를 보호하는 정도를 측정하는 소프트웨어 테스트 기법
(2) 보안성(Security)의 부특성
부특성 | 설명 |
---|---|
기밀성 (Confidentiality) | 접근 권한이 있는 사람에게만 데이터에 액세스할 수 있도록 하는 정도 |
무결성 (Integrity) | 컴퓨터 프로그램 또는 데이터에 무단으로 접근/변경되는 것을 방지하는 정도 |
부인 방지성 (Non-repudiation) | 사건 및 행위 후에 부인하지 못하도록 행동 및 사건에 관해 입증할 수 있는 정도 |
책임성 (Accountability) | 각 개인을 유일하게 식별하여 행위를 기록하고 필요 시 그 행위자를 추적할 수 있는 능력 |
인증성 (Authenticity) | 사건 및 행동에 관해 실제 행위자임을 증명할 수 있는 정도 |
- 시스템 보안성을 검증하기 위해 주로 침입(침투) 테스트와 소스코드 정적 분석 기법 사용
2. 보안성 테스트를 위한 침입 테스트(Penetration Test)
(1) 침입 테스트 유형 및 대상
침입 테스트 유형 | 테스트 대상 | 테스트 방법 |
---|---|---|
애플리케이션 침입 테스트 | Web App, 모바일 App, API 등 | – OWASP Top 10 취약점 검색 – App 고유의 보안 결함 및 취약성 검사 |
네트워크 침입 테스트 | 네트워크 연결 자산(서버, 라우터, PC 등) | – 외부 테스트: 외부 인터넷 연결 자산 검사 – 내부 테스트: 내부자 모방 취약성 검사 |
하드웨어 침입 테스트 | PC, 모바일/IoT 디바이스, 운영 기술(OT) | – 원격 액세스 운영 체제 악용 등 S/W 결함 – 물리적 취약성, 손상된 디바이스 악용 |
내부 직원 침입 테스트 | 직원의 사이버 보안 인식, 소셜 엔지니어링 | – 피싱, 스미싱 기반 중요 정보 유출 검사 – 사무실의 물리적 보안 평가, 테일게이팅 |
(2) 침입 테스트 프로세스
(3) 침입 테스트 도구 및 기능
침입 테스트 도구 | 주요 기능 | 도구 사례 |
---|---|---|
특수 운영 체제 | 침입 테스트 및 해킹을 위해 설계된 특수 설계된 OS | 침입 테스트 도구가 사전 설치된 Kali Linux |
자격 증명 크래킹 도구 | 암호화 해독, 봇/스크립트 기반 비밀번호 생성 무차별 대입 공격 | Medusa, Hydra, Hashcat, John hte Ripper |
포트 스캐너 | 시스템의 오픈된 포트에 대해 원격 접근 테스트 | Nmap, masscan, zMap |
취약점 스캐너 | 알려진 취약점을 시스템에서 검색, 잠재적 침입 경로 탐색 | Nessus, Core Impact, Netsparker |
패킷 분석기 | 패킷을 캡쳐하여 분석, 트래픽 경로 및 데이터 내용 파악 | Wireshark, tcpdump |
침입 프레임워크 | 제공된 익스플로잇 선택, 사이버 공격 자동화 | Metasploit |
- 침입 테스트는 침입자의 관점에서 소프트웨어 시스템의 취약성(Vulnerability)을 찾는 테스트로 시스템 안전성 전문가가 수행하여 ISO/IEC 27001 등 정보 보안 표준을 준수
3. 보안성 테스트를 위한 소프트웨어 정적 분석 기법
구분 | 평가 항목 | 기준 |
---|---|---|
입력 데이터 검증 표현 | 디렉토리 경로 | – 입력값 디렉토리 필터링 |
스크립트 금지 | – 업로드 시 특정 확장자 제한 | |
SQL Injection | – 입력 값 필터링 | |
XSS 공격 점검 | – 게시물에 스크립트 제한 | |
서버 통제 | – HTML, 웹APP 소스 리뷰 | |
보안 기능 포함 여부 | 접근 제어 | – 접근 권한 필요 부분 확인 |
중요 자원 권한 | – 중요 자원 권한 부여 금지 | |
암호 알고리즘 | – 최신 암호 알고리즘 사용 | |
중요 정보 전송 | – 중요 정보 전송 시 암호화 | |
패스워드 저장 | – 해시암호 등 일방 암호화 | |
취약 패스워드 | – 비밀번호 조합 규칙 수립 | |
에러 처리 | 메시지 노출 | – 오류 메시지 코드 외부 노출 |
오류 상황 대응 | – 오류 상황 대응 방안 수립 | |
적절한 예외 처리 | – 의도하지 않는 상황 차단 | |
코드 오류 | Null 포인터 | – Null 설정된 변수 주소 참조 |
부적절 자원 해제 | – 메모리 자원 등 누수 방지 |
- 소스코드를 분석하기 위해 CppCheck, FindBugs 등 정적 분석 도구를 사용하여 CWE-658(C 언어), CWE-659(C++ 언어), CWE-660(JAVA) 등 소스코드 규칙 검사
4. 보안성 테스트 위한 정적 분석 도구 및 소스코드 규칙
(1) 정적 분석 도구
분석 언어 | 분석 도구 | 특징 |
---|---|---|
C/C++ | CppCheck | – OpenSource S/W, Windows/Linux 계열 사용 – 배열 인덱스 참조 위반, 생성자 없는 클래스/변수 |
JAVA | FindBugs | – 결함 발생 유형 검출, 버그 우선순위로 나누어 표현 – 기본 제공 패턴에서 수정할 버그 필터 설정(XML) |
PMD | – 선 정의 룰셋 자바 코드 분석, 타 GUI 환경 연동 플러그인 – 기본 룰셋 정의 → 룰 정의 → 룰셋 설정 → 허위 경보 처리 |
(2) 주요 소스코드 규칙
분석 언어 | 소스코드 규칙 | 주요 규칙 |
---|---|---|
C | CWE-658 | – Stack overflow, Buffer overflow, Null pointer dereference 등 |
C++ | CWE-659 | – Uncaught exception, declaration of catch for generic exception 등 |
JAVA | CWE-660 | – Direct use of unsafe JNI, Public clonable() method without final 등 |
- CWE(Common Weakness Enumeration): 소스코드에 존재할 수 있는 신뢰성 및 보안성 관련 코딩 규칙 목록을 정의
[참고]
- 한국정보통신기술협회(TTA), 소프트웨어테스트 전문가(CSTS) 가이드
- IBM, 침투 테스트란