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를 활용하면 코드 보안성을 높이고, 개발 과정에서 취약점을 조기에 발견할 수 있습니다.

+ Recent posts