GitHub CodeQL 테스트

■개요
  CodeQL은 GitHub 보안기능 중 하나로 개발자가 보안 검사를 자동화하고 취약점 진단을 수행하는데 사용되는 분석엔진이다.
  CodeQL은 소스코드 컴파일을 모니터링하여 소스코드 내 데이터 흐름이나 변수등을 자체 DB에 저장하고, 전용 쿼리문을 통해 DB에서 원하는 결과를 도출 할 수 있다.

■관련 링크
  https://codeql.github.com/docs/codeql-overview/
  https://codeql.github.com/docs/codeql-language-guides/codeql-for-cpp/
  https://dev.to/aws-builders/find-source-code-vulnerabilities-with-codeql-before-you-commit-2hof
  https://github.com/github/codeql-cli-binaries/releases

■라이선스
  1. 학문적 연구 또는 개인 사용 가능
  2. GitHub.com에 등재된 오픈 소스 가능
  3. GitHub Advanced Security 라이선스를 구매한 유료 고객 사용 가능
  그 외 사용 금지.

■지원 언어
  c++, c#, csv, go, html, java, javascript, properties, python, ruby, swift, xml, yaml

■설치
  1. CodeQL CLI용 바이너리 다운로드 (https://github.com/github/codeql-cli-binaries/releases)
  2. 설치 (codeql 실행파일 경로를 PATH 환경 변수에 추가)

■테스트
  1. 준비물
    webgoat 소스코드, CodeQL, ant, java 1.8

  2. webgoat 소스코드 컴파일 준비
    # build.xml javac 항목에 encoding="ISO-8859-1" 추가
      <javac srcdir="${src.home}"
            destdir="${build.home}/WEB-INF/classes"
              debug="${compile.debug}"
        deprecation="${compile.deprecation}"
           optimize="${compile.optimize}"
           encoding="ISO-8859-1">

  3. 지원 언어 확인
    codeql resolve languages

  4. Java 언어 쿼리문 다운로드 및 설치
    codeql pack download codeql/java-queries

  5. 컴파일을 하며 데이터베이스 생성
    ※이 과정은 Fortify SCA가 MBS를 생성하는 과정으로 이해.
    # DB 디렉토리 생성
      rmdir /s /q d:\0_tmp\codeql-dbs
      mkdir d:\0_tmp\codeql-dbs\webgoat

    # 소스코드 디렉토리로 이동
      cd /d d:\0_tmp\webgoat1

    # ant clean 후 컴파일 실행
      ant clean
      codeql database create d:\0_tmp\codeql-dbs\webgoat --overwrite --language=java --command="ant -buildfile build.xml"
      ...
      Successfully created database at D:\0_tmp\codeql-dbs\webgoat.
      메세지가 나오면 성공.

    6. 쿼리를 실행하여 결과 출력
      ※이 과정은 Fortify SCA가 FPR을 생성하는 과정으로 이해.
      지원하는 결과 포맷: csv, sarif-latest, sarifv2.1.0, dgml, dot

      codeql database analyze d:\0_tmp\codeql-dbs\webgoat --format="csv" --output=d:\0_tmp\codeql-output\scan.csv
      ...쿼리문인 qlx 파일들을 로드 후 실행하는 과정...

위로 스크롤