
Phoenix Framework를 위한 보안 중심의 정적 분석
Sobelow는 Elixir 및 Phoenix 프레임워크를 위한 보안 중심 정적 분석 도구입니다. 보안 연구자에게는 관심 지점을 빠르게 파악하는 유용한 도구이며, 프로젝트 관리자에게는 다양한 일반적인 취약점 도입을 방지하는 데 사용될 수 있습니다.
현재 Sobelow는 다음과 같은 유형의 보안 문제를 탐지합니다.
잠재적 취약점은 불안전성에 대한 신뢰도에 따라 다른 색상으로 표시됩니다. 높은 신뢰도는 빨간색, 중간 신뢰도는 노란색, 낮은 신뢰도는 초록색입니다.
일반적으로 함수가 안전하지 않게 사용될 수 있지만, 해당 함수가 사용자 입력을 받는지 신뢰할 수 있게 판단할 수 없는 경우 "낮은 신뢰도"로 표시됩니다. 즉, 발견 항목이 초록색으로 표시되면 중대한 보안 취약점일 수 있지만, 더 많은 수동 검증이 필요합니다.
참고: 이 프로젝트는 지속적으로 개발 중이며, 시간이 지남에 따라 추가적인 취약점이 플래그될 예정입니다. 버그를 발견하거나 추가 기능 또는 보안 검사를 요청하려면 이슈를 열어주세요!
Sobelow를 사용하려면 애플리케이션의 종속성에 추가할 수 있습니다.
def deps do
[
{:sobelow, "~> 0.13", only: [:dev, :test], runtime: false}
]
end
또한 명령줄에서 다음을 실행하여 Sobelow를 전역적으로 설치할 수 있습니다.
$ mix escript.install hex sobelow
최신 릴리스가 아닌 master 브랜치에서 설치하려면 다음 명령을 사용할 수 있습니다.
$ mix escript.install github nccgroup/sobelow
설치 후, Phoenix 프로젝트를 스캔하는 가장 간단한 방법은 프로젝트 루트에서 다음을 실행하는 것입니다.
$ mix sobelow
참고: 경로 인수는 절대 경로이거나 애플리케이션 루트를 기준으로 한 상대 경로여야 합니다.
--root 또는 -r - 애플리케이션 루트 디렉터리를 지정합니다. 경로 인수를 받습니다(예: ../my_project).
--verbose 또는 -v - 코드 조각 및 추가 발견 세부 정보를 출력합니다.
--ignore 또는 -i - 특정 발견 유형을 무시합니다. 쉼표로 구분된 모듈 이름 목록을 받습니다(예: XSS.Raw,Traversal).
--ignore-files - 파일을 무시합니다. 쉼표로 구분된 파일 이름 목록을 받습니다(예: config/prod.exs).
--details 또는 -d - 발견 유형에 대한 세부 정보를 가져옵니다. 단일 모듈 이름을 받습니다(예: Config.CSRF).
--all-details - 모든 발견 유형의 세부 정보를 가져옵니다.
Sobelow는 사용자가 자주 사용하는 옵션을 설정 파일에 저장할 수 있도록 허용합니다. 예를 들어, 항상 다음을 실행하는 경우:
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low
--save-config 플래그를 사용하여 .sobelow-conf 설정 파일을 만들 수 있습니다:
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low --save-config
이 명령은 애플리케이션 루트에 .sobelow-conf 파일을 생성합니다. 이 파일을 직접 편집하여 변경할 수 있습니다.
이 패키지를 처음 사용할 때 옵션 없이 명령을 실행할 수도 있습니다:
$ mix sobelow --save-config
생성된 설정 파일에는 각 옵션의 기본값이 채워집니다. (이렇게 하면 기존 코드베이스에 이 패키지를 빠르게 통합하는 데 도움이 됩니다.)
이제 저장된 구성으로 Sobelow를 실행하려면 --config 플래그와 함께 Sobelow를 실행하면 됩니다.
$ mix sobelow --config
Sobelow는 과소 보고보다 과대 보고를 선호합니다. 따라서 일반적인 스캔에서 많은 오탐지를 발견할 수 있습니다. 이러한 발견 항목은 함수 정의 앞에 # sobelow_skip 주석과 모듈 목록을 추가하여 개별적으로 무시할 수 있습니다.
# sobelow_skip ["Traversal"]
def vuln_func(...) do
...
end
Sobelow를 새 프로젝트에 통합할 때 많은 오탐지가 발생할 수 있습니다. 출력된 모든 발견 항목을 오탐지로 표시하려면 --mark-skip-all 플래그와 함께 sobelow를 실행하세요.
적절한 발견 항목에 태그를 지정한 후에는 --skip 플래그와 함께 Sobelow를 실행하세요.
$ mix sobelow --skip
# sobelow_skip 주석은 함수 수준의 발견 항목만 표시할 수 있지만(구성 문제를 건너뛰는 데는 사용할 수 없음), --mark-skip-all 플래그는 모든 유형의 발견 항목을 건너뛰는 데 사용할 수 있습니다.
발견 항목 범주는 모듈로 나뉩니다. 이러한 모듈은 발견 클래스를 무시(ignore 및 skip 옵션 사용)하거나 취약점 세부 정보를 가져오는 데(details 옵션 사용) 사용할 수 있습니다.
이 목록 및 기타 유용한 정보는 명령줄에서 확인할 수 있습니다:
$ mix help sobelow
엄브렐라 앱 내의 모든 하위 앱을 단일 명령으로 Sobelow로 스캔하려면 루트 mix.exs 파일에 sobelow에 대한 별칭을 추가할 수 있습니다:
defp aliases do
[
sobelow: ["cmd mix sobelow"]
]
end
엄브렐라 앱에서 설정 파일을 사용하려면 각 하위 애플리케이션에 .sobelow-conf를 생성하고 --config 플래그를 사용하세요.
프로젝트를 스캔할 때 Sobelow는 가끔 업데이트를 확인하고 새 버전이 있으면 알림을 출력합니다. Sobelow는 스캔된 프로젝트의 루트에 .sobelow 파일을 생성하여 마지막 업데이트 확인을 추적합니다.
이 기능이 필요하지 않은 경우 --private 플래그를 스캔과 함께 사용할 수 있습니다.
--private - 업데이트 확인을 건너뜁니다.
--router - 라우터 위치를 지정합니다. 라우터 위치가 비표준인 경우에만 사용해야 합니다. 경로 인수를 받습니다(예: my/strange/router.ex).
--exit - low, medium 또는 high의 신뢰도 임계값 이상에서 0이 아닌 종료 상태를 반환합니다. 기본값은 false로, 0 종료 상태를 반환합니다.
--threshold - low(기본값), medium 또는 high의 신뢰도 수준 이상인 발견 항목을 반환합니다.
--format 또는 -f - 발견 항목 출력 형식을 지정합니다. 형식을 받습니다(예: txt 또는 json).
json 형식에서는 --verbose와 같은 옵션이 작동하지 않습니다.
모든 json 형식의 발견 항목에는 type, file, line 키가 포함됩니다.
다른 키는 다를 수 있습니다.
--quiet - 발견 항목 수를 나타내는 한 줄을 반환합니다. 발견 항목이 없으면 출력을 반환하지 않습니다.
--compact - 신뢰도에 따라 색상이 지정된 최소 단일 줄 발견 항목을 표시합니다.
--flycheck - flycheck 기반 도구와 호환되는 최소 단일 줄 발견 항목을 표시합니다.
--save-config - 명령줄 옵션을 기반으로 설정 파일을 생성합니다. 자세한 내용은 설정 파일을 참조하세요.
--config - 설정 파일로 Sobelow를 실행합니다. 자세한 내용은 설정 파일을 참조하세요.
--mark-skip-all - 표시된 모든 발견 항목을 건너뛸 수 있는 것으로 표시합니다.
--clear-skip - --mark-skip-all로 생성된 구성을 지웁니다.
--skip - 건너뛰기로 표시된 발견 항목을 무시합니다. 자세한 내용은 오탐지를 참조하세요.
--version - Sobelow의 현재 버전을 출력합니다. 이는 CI 단계 또는 Salus와 같은 다른 도구와의 통합에 유용합니다.