최근에 개발한 음악 평론 사이트 KADR 프로젝트에 대해 취약점 분석과 시큐어 코딩을 진행하였습니다. 이 글에서는 해당 프로젝트의 취약점 스캔 및 분석 과정과 그 결과를 정리해 보겠습니다.
취약점 스캔 자동화 도구
NMAP 스캔
NMAP은 네트워크를 스캔하고 서비스 및 포트를 탐지하는 도구입니다. 다음 명령어로 스캔을 진행했습니다:
nmap -sC -sV -A -T4 -p- 192.168.219.104
스캔 결과, 총 5개의 포트가 열려 있는 것으로 확인되었습니다:
| 포트 번호 | 상태 | 서비스 및 버전 |
|---|---|---|
| 3306 | 열림 | tcpwrapped |
| 5000 | 열림 | rtsp |
| 7000 | 열림 | rtsp |
| 8080 | 열림 | http-proxy |
| 56338 | 열림 | unknown |
- 3306 포트: 이 포트는 MySQL 또는 MariaDB 데이터베이스가 사용하는 표준 포트입니다. 현재 MariaDB가 작동 중이나,
tcpwrapped상태로 인해 상세 정보는 확인되지 않았습니다. - 5000 및 7000 포트: 이 포트들은 Mac 환경에서 실행 중이므로 스킵했습니다.
- 8080 포트: Spring Boot의 내장 웹 서버인 Tomcat의 기본 포트로, Google OAuth2 로그인 페이지로 리디렉션되는 설정이 되어 있음을 확인했습니다.
Gobuster 스캔
Gobuster는 디렉토리 및 파일을 탐색하는 도구로, 다음 명령어로 스캔을 진행했습니다:
gobuster dir -u http://192.168.219.104:5173 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,sh,js,css,py --exclude-length 674
스캔 결과, 여러 파일과 디렉토리가 발견되었습니다:
| 발견된 경로 | 상태 코드 | 크기 (바이트) |
|---|---|---|
| /txt | 200 | 301 |
| /package | 200 | 902 |
| /C0 | 500 | 4692 |
여기서 /package 경로와 같이 정상 응답을 반환한 항목이 있었습니다. 그러나 많은 경로에서 500 상태 코드가 발생하여 서버 내부 오류가 생긴 것으로 보입니다.
시큐어 코딩 방법론
- 인증 및 세션 관리: JSESSIONID를 통해 세션을 관리하지만, 세션 고정 공격을 방지하기 위해 세션 ID를 주기적으로 변경해야 합니다.
- 입력 검증: 모든 사용자의 입력을 검증하여 SQL 인젝션 및 XSS 공격을 방지해야 합니다.
- HTTPS 사용: 모든 통신이 암호화되도록 HTTPS를 사용하여 데이터 전송 중의 도청을 방지해야 합니다.
자주 묻는 질문
질문1: 취약점 분석의 주 목적은 무엇인가요?
취약점 분석의 주 목적은 시스템의 보안 취약점을 식별하고 이를 해결하여 데이터 유출 및 서비스 중단을 방지하는 것입니다.
질문2: NMAP 스캔 결과에서 tcpwrapped는 무엇을 의미하나요?
tcpwrapped는 방화벽 등 보안 설정에 의해 포트 접근이 제한되었음을 나타내며, 이로 인해 서비스에 대한 상세 정보가 제공되지 않는 상태입니다.
질문3: Gobuster의 사용 목적은 무엇인가요?
Gobuster는 웹 서버의 디렉토리 및 파일을 탐색하여 숨겨진 경로를 식별하고, 잠재적인 취약점을 발견하는 데 사용됩니다.
질문4: 시큐어 코딩을 위한 가장 중요한 원칙은 무엇인가요?
시큐어 코딩의 가장 중요한 원칙은 입력 검증, 인증 및 권한 부여, 그리고 안전한 세션 관리를 통해 보안 취약점을 사전에 차단하는 것입니다.
질문5: 프로젝트 코드에 대한 접근은 어떻게 하나요?
해당 프로젝트의 코드와 관련된 내용은 GitHub에서 확인할 수 있으며, 아래 링크를 통해 접근 가능합니다.
– KADR 프론트엔드 코드
– KADR 백엔드 코드