파이썬 노트북에서 테스트 데이터 누출을 감지하는 정적 분석 도구
이것은 ASE'22 용지의 도구 : 노트북의 데이터 유출 : 정적 감지 및 더 나은 프로세스. 온라인 데모도 제공됩니다. 평가 스크립트 및 자료에 대해서는이 repo를 참조하십시오.
git submodule update --init --recursive 의 추론 엔진 인 [Pyright]의 맞춤형 버전을 뽑고 빌드하십시오.python3 -m src.main /path/to/filepython3 -m src.run /path/to/dir-h 플래그를 사용하여 찾을 수 있습니다. git submodule update --init --recursive .requirements.txt 에 추가하여 컨테이너에 설치하고 격언에서 사용됩니다.docker build -t leakage-analysis .docker run -v /path/to/dir:/path/to/dir leakage-analysis /path/to/dir/$FILE -o . 할인 된 모든 노트북은 Python 파일로 변환되어 /path/to/dir 에 저장해야합니다. 주어진 입력 파일 test.py 의 경우 -o 플래그가 지정되면 출력 html 파일 test.html 생성됩니다.
test.html 에서는 입력 코드와 함께 분석 결과를 보여줍니다. 감지 된 누설 문제에 대한 요약 테이블이 상단에 표시됩니다. 사용자는 대화식 버튼을 사용하여 관련 코드를 강조하고 다른 코드 세그먼트를 탐색 할 수 있습니다.
Python 파일이 주어지면 src/main.py 먼저 입력을 AST로 구문 분석합니다. 그런 다음 Global_collector.py에서 GlobalCollector 인스턴스 ( global_collector.py )로 AST를 공급합니다. 이는 나중에 변환으로 이름을 바꿀 수없는 글로벌 변수를 수집합니다. 나중에 무시할 것입니다.
다음으로, 원래의 파이썬 코드를 1) 복잡한 문장을 여러 단순한 진술로 나누고 2)을 SAS (STATION SILL DASSIONMENT) 양식으로 변환하는 CodetRansformer 인스턴스 ( irgen.py )로 AST를 공급합니다.
그런 다음 변환 된 코드 파일에서 유형 추론 엔진을 호출합니다. 단위 추론 정보를 사용하면 Code 파일을 Datalog Facts로 변환합니다. factgen.py 의 Fact -Generator를 사용하여 최종 분석이 읽을 수 있습니다.
마지막으로, 생성 된 사실에 대한 Datalog Analysis ( main.dl )를 수행하고 동일한 디렉토리에서 결과를 출력합니다.
src
├── factgen.py: convert transformed code to datalog facts
├── global_collector.py: collect global variables
├── __init__.py
├── irgen.py: transform code to simpler SSA form
├── main.dl: main datalog analysis that analyzes leakage
├── main.py: run analysis on a single file
├── render.py: output a html file based on analysis results and original code
├── run.py: run analysis on multiple files
└── scope.py: manage variable scopes for renaming purposes