A Study on Tools for Development of AI-based Secure Coding Inspection (2)

·2024년 8월 18일

저번 포스트에 이어, 이어서 작성을 해보겠습니다.
이번 포스팅에서는 조사한 취약점 분석 도구에 대해서 정리했습니다.

취약점분석 도구 정리

팀원들이 조사한 도구를 발표했을 때, 가볍게 정리해놓은 것을 옮긴 것이기 때문에 개인의 의견이 들어가 있습니다.

  1. PMD

    • 정적 분석 도구
    • 기본 룰셋 사용(여러 버전)
    • 기본적인 분석만 가능
    • 캐치 블락, 변수명, 클래스 네임과 같은 것들만 분석
    • 암호화 알고리즘 설명이 없으며, 하드코드 설명만 됨
    • 사용 등에 대한 경고 위주, 보안취약점 설명은 없음
  2. YASCA

    • 보고 싶은 코드 주소를 입력하여 실행
    • 다양한 취약점 확인 불가
    • 하드코드 설명 + 암호화 알고리즘 다 나옴
    • 장점 : 실행결과를 html로 출력 가능
  3. Find Security Bugs

    • 이클립스에서 find bug 설치하여 실행
    • 숫자로 버그 표시됨
    • 장점 : 설치 및 구현 쉬움
    • 단점 : 자세한 설명 방법 찾기 어려움
  4. MobSF

    • 흔하게 나오는 취약점은 다 표시됨
    • 소스 코드 파일도 분석 가능
    • 정적, 동적 분석 기능 지원
    • 장점 : 작동 방법 쉬움
  5. SonarQube

    • 정적 분석 도구
    • 무료 버전이 제공됨
    • 버그, 취약점뿐만 아니라 수동 검토가 필요한 부분과 같은 것들도 분석
    • eclipse에서 약식으로 설치하여 구현 가능(단, 구체적인 설명은 확인 불가)
    • 코드의 보안도는 어떤지 등급으로 표시됨
    • 장점 : ui 잘 구현되어 있어, 알아보기 쉬움

SonarQube 조사하기

  1. SonarQube Server
    3가지의 메인 프로세스 구동
    • Web Server : 사용자들에게 분석 결과 보여줌, SonarQube 설정 페이지 제공
    • Search Server : Elasticsearch 서버 사용, 사용자에게 검색 기능 제공
    • Compute Engine Server : 정적 분석 결과 생성, 이를 SonarQube Database 통해 저장
  2. SonarQube Database
    SonarQube의 기본 설정들(보안, plugin 정보 등)과 프로젝트 분석 스냅샷들을 저장. 설치 시 기본으로 H2 DB 포함하며 설정을 통해 다양한 DB 사용 가능
  3. SonarQube Plugin
    내부에서 사용하는 다양한 기능(분석 프로그램 언어, 권한, 관리, SCM 등)을 플러그인 형태로 설치 가능
  4. SonarQube Scanne
    프로젝트 정적 분석을 수행하는 툴로 다양한 형식으로 제공되며 CI Server와 연계하여 사용 가능

findBugs

자바 바이트 코드를 분석하여 버그 패턴 발견하는 정적분석 공개소프트웨어로, Java 프로그램에서 발생 가능한 100여 개의 잠재적인 에러에 대해 4개 등급(scariest, scary, troubling, concern)으로 구분해 탐지→ 위험 정도에 대해 알 수 있어서 수정할 부분을 우선순위로 판단하기 좋다. 또한 그 결과를 XML로 저장할 수 있도록 지원한다
Linux, Windows, MacOSX 운영체제 지원해 다양한 OS 적용 가능하다는 점과, GUI기반의 단독 실행(Stand alone) 응용 프로그램 방식과 Eclipse, NetBeans, IntelliJ IDEA, Gradle, Hudson and Jenkins와 같은 IDE의 플러그인 방식을 지원한다.

  • Bad practice: 클래스 명명규칙, null 처리 실수 등 개발자의 나쁜 습관 탐지
  • Correctness: 잘못된 상수 무의미한 메소드 호출 등 문제의 소지가 있는 코드를 탐지
  • Dodgy code: int의 곱셈결과를 long으로 변환하는 등 부정확하거나 오류를 발생시킬 수 있는 코드를 탐지
  • Experimental: 메소드에서 생성된 stream이나 리소스가 해제하지 못한 코드를 탐지
  • Internationalization: Default 인코딩을 지정하지 않은 경우 등 지역특성을 고려하지 않은 코드 탐지
  • Malicious code vulnerability: 보안 코드에 취약한 가변적인 배열이나 콜렉션, Hashtable 탐지
  • Multithreaded correctness: 멀티쓰레드에 안전하지 않은 객체 사용 등을 탐지
  • Performance: 미사용 필드, 비효율적 객체생성 등 성능에 영향을 주는 코드를 탐지
  • Security: CSS, DB 패스워드 누락 등 보안에 취약한 코드를 탐지

Bad practice, Correctness, Dodgy code, Experimental, Internationalization, Malicious code vulnerability, Multithreaded correctness, Performance, Security 등 9개 이상의 카테고리와 400개 넘는 진단 규칙 제공해주며 룰셋의 커스터마이징을 통해 각 기업의 소프트웨어를 진단하기 위한 최적화 수행이 가능하다.

findSecurityBugs

FindSecurityBugs는 자바 웹 어플리케이션에 대한 보안 감사를 지원하는 FindBugs의 플러그인으로 Spring-MVC, Struts, Tapestry 등 다양한 SW 개발 프레임워크와 Eclipse, IntelliJ, Android Studio, NetBeans 등 통합 개발환경 도구, Jenkins와 SonarQube와 같은 CI(Continuous integration)도구에서 활용이 가능하다. 또한 200개 이상의 시그니처 활용해 OWASP TOP 10 과 CWE를 커버하는 78개의 버그패턴을 탐지 가능하다.

JAVA 웹 애플리케이션 및 Android 애플리케이션의 보안 감사를 위한 SpotBugs 플러그인으로 Command Injection, XPath Injection, SQL/HQL Injection, XXE 와 암호화 취약점을 포함해 128개의 서로 다른 취약성 유형을 탐지 가능하다.

  • FindSecurityBugs 탐지 유형
    • 부적절한 입력 탐지 : Untrusted Servlet parameter, session Cookie, Query String 등
    • SQL Injection 탐지 : Hibernate, JDO, JPA, Spring JDBC, LDAP Injection 등
    • XSS : JSP, Servlet, JavaScript(Android) XSS를 탐지
    • 취약한 암호화 알고리즘 : SHA-1, MD2/MD4/MD5 또는 NullCipher 등 취약한 암호화 함수를 탐지
    • 취약한 URL Redirection : 유효하지 않은 URL로 Redirection 취약점 탐지
    • 기타 : 보안 플래그가 없는 쿠키, Regex DOS 취약점, 신뢰할 수 없는 Context-type 또는 헤더

도구를 분석했으니, 도구가 못하는 것을 머신러닝으로 구현하는 방향으로 잡았습니다.

도구를 평가하기 위한 테스트 케이스 코드로 이번 프로젝트에서는 Juliet Code 를 사용했습니다.
미국 Nist에서 제작했고, 오류를 테스트하기 위해 만든 코드로,
The Juliet 1.1C/C++ Java Test Suite
Test Suites > Juliet Java 1.3 을 다운로드하여 진행했습니다.
여기서 한 번 끊고 다음 포스트에서 머신러닝 알고리즘에 대해서 써보겠습니다.

피드백은 언제나 환영입니다!
profile
Whatever I want | Interested in DFIR, Security, Infra, Cloud

0개의 댓글