PMD는 정적 코드 분석 도구로, 보안 취약점을 포함한 코드 품질 문제를 찾아내는 데 사용됩니다.
PMD를 활용하여 보안 취약점을 분석하는 방법 입니다.
1. PMD 설치 및 실행
(1) PMD 다운로드
- PMD 공식 웹사이트에서 최신 버전을 다운로드합니다.
- 압축을 풀고, 실행할 환경을 설정합니다.
(2) PMD 실행 명령어
pmd -d <분석할 디렉터리> -R <규칙 세트> -f text
예를 들어, src 디렉터리에 대해 Java 보안 관련 규칙을 실행하려면:
pmd -d src -R rulesets/java/security.xml -f text
2. PMD로 보안 취약점 찾기
PMD는 여러 언어에서 동작하며, 특히 Java의 보안 취약점을 분석할 수 있는 규칙을 제공합니다.
(1) 주요 보안 취약점 규칙
보안 취약점 유형 PMD 규칙 파일 설명
SQL Injection | security.xml | 직접적인 SQL 문자열 연결 감지 |
XSS (크로스사이트 스크립팅) | security.xml | 사용자 입력값 검증 부족 감지 |
하드코딩된 비밀번호 | security.xml | 코드 내 비밀번호, 키 포함 여부 탐지 |
취약한 암호화 알고리즘 | security.xml | MD5, DES 등 약한 암호화 사용 감지 |
불안전한 객체 역직렬화 | security.xml | ObjectInputStream 사용 감지 |
(2) 보안 취약점 예제 코드
다음과 같은 취약한 코드가 있다고 가정해봅시다.
public void vulnerableSQL(String userInput) {
String query = "SELECT * FROM users WHERE username = '" + userInput + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
}
위 코드는 SQL Injection 공격에 취약합니다.
(3) PMD를 이용한 탐지 결과
PMD 실행 후, 다음과 같은 메시지가 출력될 수 있습니다.
VulnerableSQL.java:3: Avoid using string concatenation in SQL queries (security:SQLInjection)
3. PMD 규칙 커스터마이징
PMD는 기본 제공 규칙 외에도 커스텀 규칙을 작성할 수 있습니다.
(1) 사용자 정의 규칙 작성 (custom-rules.xml)
Hardcoded passwords should not be used in source code.
1
(2) 실행 방법
pmd -d src -R custom-rules.xml -f text
4. PMD를 CI/CD에 통합하기
PMD는 Jenkins, GitHub Actions 등과 통합하여 자동 코드 보안 분석을 수행할 수 있습니다.
(1) Maven 플러그인 사용
pom.xml에 다음을 추가:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.18.0</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
(2) 실행 명령어
mvn pmd:check
결론
PMD는 보안 취약점을 탐지하는 강력한 정적 분석 도구입니다.
✅ SQL Injection, XSS, 하드코딩된 비밀번호 등 감지 가능
✅ 커스텀 규칙 추가 가능
✅ CI/CD 통합하여 자동화 가능
PMD를 활용하면 코드 보안성을 높이고, 개발 과정에서 취약점을 조기에 발견할 수 있습니다.
'[JAVA]JAVA실무' 카테고리의 다른 글
[JAVA]System.out.println VS Logger (1) | 2025.04.22 |
---|---|
[JAVA]실무 try-catch exception 처리 (0) | 2025.04.21 |
[JAVA]Java exception 종류 예시 (0) | 2025.04.21 |
[JAVA]Spring 기반 웹 애플리케이션 기본 구조 (0) | 2025.04.14 |
[JAVA]보안취약점 조치 예시(기초) PMD (0) | 2025.03.22 |