React & Spring 프로젝트 취약점 분석 및 시큐어 코딩



React & Spring 프로젝트 취약점 분석 및 시큐어 코딩

최근에 개발한 음악 평론 사이트 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 상태 코드가 발생하여 서버 내부 오류가 생긴 것으로 보입니다.

 

👉 ✅ 상세 정보 바로 확인 👈

 

시큐어 코딩 방법론

  1. 인증 및 세션 관리: JSESSIONID를 통해 세션을 관리하지만, 세션 고정 공격을 방지하기 위해 세션 ID를 주기적으로 변경해야 합니다.
  2. 입력 검증: 모든 사용자의 입력을 검증하여 SQL 인젝션 및 XSS 공격을 방지해야 합니다.
  3. HTTPS 사용: 모든 통신이 암호화되도록 HTTPS를 사용하여 데이터 전송 중의 도청을 방지해야 합니다.

자주 묻는 질문

질문1: 취약점 분석의 주 목적은 무엇인가요?

취약점 분석의 주 목적은 시스템의 보안 취약점을 식별하고 이를 해결하여 데이터 유출 및 서비스 중단을 방지하는 것입니다.

질문2: NMAP 스캔 결과에서 tcpwrapped는 무엇을 의미하나요?

tcpwrapped는 방화벽 등 보안 설정에 의해 포트 접근이 제한되었음을 나타내며, 이로 인해 서비스에 대한 상세 정보가 제공되지 않는 상태입니다.

질문3: Gobuster의 사용 목적은 무엇인가요?

Gobuster는 웹 서버의 디렉토리 및 파일을 탐색하여 숨겨진 경로를 식별하고, 잠재적인 취약점을 발견하는 데 사용됩니다.

질문4: 시큐어 코딩을 위한 가장 중요한 원칙은 무엇인가요?

시큐어 코딩의 가장 중요한 원칙은 입력 검증, 인증 및 권한 부여, 그리고 안전한 세션 관리를 통해 보안 취약점을 사전에 차단하는 것입니다.

질문5: 프로젝트 코드에 대한 접근은 어떻게 하나요?

해당 프로젝트의 코드와 관련된 내용은 GitHub에서 확인할 수 있으며, 아래 링크를 통해 접근 가능합니다.
KADR 프론트엔드 코드
KADR 백엔드 코드

이전 글: 부산 해운대 빛축제: 겨울 크리스마스 여행의 필수 코스