2020 년 3 월 업데이트 : Python 코드베이스에서 보안 취약점을 빠르게 찾을 수있는 놀라운 PYSA 튜토리얼을 참조하십시오.
Facebook의 Pyre는 밝은 미래와 많은 똑똑한 사람들이 일하는 놀라운 프로젝트입니다. 프로그램 분석에 대해 그다지 모른다면 Pyre로 Pyt가 어떻게 작동하는지 이해하는 것이 좋습니다. 대부분의 디렉토리의 ReadMe와 함께 원래의 마스터 논문과 일부 슬라이드가 있습니다. 그 말로, 나는 풀 요청을 검토하고 몇 개 이상을 만들면 쓰기 권한을 부여하게되어 기쁩니다.
이 프로젝트에는 많은 기여자들이 있었는데, 나는 당신이 더 많은 일을하고 싶다면 미래에 다른 프로젝트 (예 : Pyre)와 같은 다른 프로젝트를 수행 할 계획입니다. :)
유형 주석이없는 Python Codebase를 가진 보안 엔지니어 인 경우 Pyre가 처리하지 않을 경우 싱크대를 보안 래퍼 (DefusedXML과 같은)로 교체하고 표준 싱크의 모든 용도를 경고하는 것이 좋습니다. DataFlow 분석이 필요하지 않으므로 Bandit을 사용하여이를 수행 할 수 있지만, 오 탐지 속도가 높기 때문에 많이 다듬어 야합니다.
이론적 기초를 기반으로 한 파이썬 웹 응용 프로그램의 정적 분석 (제어 흐름 그래프, 고정 점, 데이터 흐름 분석)
최근 변경 사항을 보려면 ChangElog를 참조하십시오.
예제 사용 및 출력 :
계속하기 전에 Python3.6 또는 3.7이 설치되어 있는지 확인하십시오.
pip install python - taint
?PYT는 소스에서 설치할 수도 있습니다. 그렇게하려면 저장소를 복제 한 다음 실행하십시오.
python3 setup . py install 곧 pyt/ 폴더의 모든 디렉토리에서 readme.rst를 찾을 수 있습니다.
-a 옵션은 어떤 함수가 인수를 오염시키는 지 결정합니다. 기본적으로 플라스크입니다.
-t 옵션을 사용하여 소스와 싱크를 지정하십시오. 기본적 으로이 파일이 사용됩니다.
내장 또는 라이브러리 (예 : url_for 또는 os.path.join 의 기능의 경우 -m 옵션을 사용하여 오염 된 입력이 주어진 오염 된 값을 반환하는지 여부를 지정하십시오. 기본적 으로이 파일은 사용됩니다.
사용법 : Python -M Pyt [-H] [-A 어댑터] [-PR Project_Root]
[-B BaseLine_json_File] [-j] [-t trigger_word_file]
[-m blackbox_mapping_file] [-i] [-o output_file]
[-ignore-nosec] [-r] [-x 제외 _paths]
[-dont-prepend-root] [-No-local-Imports]
대상 [대상 ...]
필수 주장 :
스캔 할 소스 파일 또는 디렉토리를 대상으로합니다
중요한 선택적 인수 :
-어댑터, -아막 어댑터
웹 프레임 워크 어댑터 : 플라스크 (기본값),
Django, 모든 또는 철론
-t trigger_word_file, -trigger-Word-file trigger_word_file
소스 및 싱크 목록이있는 입력 파일
-m blackbox_mapping_file, -Blackbox-Mapping-File BlackBox_Mapping_File
입력 블랙 박스 매핑 파일
선택적 인수 :
-pr project_root, -project-root project_root
입력 파일시에만 중요한 프로젝트 루트를 추가하십시오
프로젝트의 근본이 아닙니다.
-B BaseLine_json_File, -Baseline Baseline_json_File
(만
JSON 형식의 파일이 허용됩니다)
-j, -json은보고 대신 json을 인쇄합니다.
-i, -간호사는 각 Blackbox 함수 호출에 대해 묻습니다.
취약성 체인.
-o output_file, -output output_file
Filename에 보고서를 작성하십시오
-ignore-nosec은 # nosec 댓글로 줄을 건너 뛰지 않습니다
-r, -하위 디렉토리에서 파일을 찾아서 처리합니다
-x 제외_Paths, -exclude Excluded_paths
쉼표로 파일 별도
-프로젝트 루트 /앱의 dont-prepend-root, 가져 오기는 선불되지 않습니다.
앱으로.*
-로컬 imports가 설정된 경우 절대 수입은
프로젝트 루트. 설정하지 않으면 모듈이 동일합니다
디렉토리는 이름으로 만 가져올 수 있습니다.
사용자 python3 -m pyt examples/vulnerable_code/XSS_call.py 처럼 사용합니다
테스트 실행 python3 -m tests
개별 테스트 파일을 실행 python3 -m unittest tests.import_test
개별 테스트 python3 -m unittest tests.import_test.ImportTest.test_import 실행
Slack Group에 가입하십시오 : https://pyt-dev.slack.com/- 초대 : [email protected]
지침
가상 환경과 프로젝트를 유지하기위한 디렉토리 생성
mkdir ~/a_folder
cd ~/a_folder
프로젝트를 디렉토리로 복제하십시오
git clone https://github.com/python-security/pyt.git
가상 환경을 만듭니다
python3 -m venv ~/a_folder/
올바른 버전이 있는지 확인하십시오
python3 --version 샘플 출력 Python 3.6.0
pip --version 샘플 출력 pip 9.0.1 from /Users/kevinhock/a_folder/lib/python3.6/site-packages (python 3.6)
프로젝트 디렉토리로 변경
cd pyt
앞으로 source ~/a_folder/bin/activate 개발을 시작하십시오.