Python 코드 스캐닝: 엔터프라이즈급 코드 보안 취약점 스캐닝 Bandit

목차

산적이란 무엇입니까?

특징

설치 및 구성

산적 구성

Pycharm은 외부 도구를 구성합니다.

연습을 활용하세요

명령줄 매개변수

단일 파일 확인

전체 디렉토리를 확인하세요

PyCharm에서 단일 파일 또는 프로젝트 디렉터리 스캔

유스 케이스

애플리케이션 시나리오

요약하다

참고자료


참고: 후속 기술 공유, 즉각적인 업데이트, 보다 시의적절한 기술 정보 및 학습 기술 자료는 공식 계정 CTO Plus 에서 공개될 예정입니다 . 공식 계정: CTO Plus를 팔로우하세요.

이전 기사에서는 Python 코드의 보안 취약점을 검사하는 데 특별히 사용되는 도구로 Bandit을 소개했습니다. 코드 보안 취약점 스캔은 소프트웨어 보안을 보장하는 중요한 링크 중 하나입니다. 소프트웨어 개발 과정에는 잠재적인 보안 취약점이 많이 존재하며, 이러한 취약점을 적시에 발견하고 복구하려면 전문적인 보안 스캐닝 도구를 사용해야 합니다. Bandit은 코드와 같은 코드의 잠재적인 보안 위험을 확인하는 데 도움을 줄 수 있습니다. 인젝션, XSS 공격, SQL 인젝션, 민감정보 유출 등

이번 글에서는 Python 3.11 버전에서 널리 사용되는 코드 보안 취약점 스캐닝 도구인 Bandit을 소개하고, 프로젝트에서 Bandit의 특징과 사용 및 적용 시나리오를 소개하고 실제 사례와 효과를 통해 사용법을 보여드리겠습니다.

이번 글 "파이썬 코드 스캐닝: 기업 수준 코드 보안 취약점 스캐닝 산적"은 "코드 표준 및 스캐닝" 시리즈의 마지막 글입니다. 이전 글들을 자신의 상황에 맞게 읽어보시면 됩니다. 공개 계정 CTO Plus

" 엔터프라이즈급 Python 코드의 정적 스캐닝 - 코드 사양, 논리, 문법, 보안 검사 및 자동 코드 배열 소개 "

" Python PEP8 코드 사양 읽기 "

" Python 코드 스캐닝: 차세대 Python Linter 도구 Ruff "

" Python 코드 스캐닝: Python 코드 품질을 향상시키는 아티팩트 -pylint 자세한 설명 및 사용 가이드 "

" Python 코드 스캔: 경량 Python 정적 코드 분석 도구 pyflakes "

" Python 코드 스캐닝: Python 코드 사양 및 오류 검사를 위한 강력한 도구 - flake8 자세한 설명 및 실습 "

" Python 코드 스캐닝: mypy를 검사하는 정적 유형을 위한 최선의 선택 "

" Python 코드 스캔: Python 코드에서 자동으로 중복 제거 - autoflake 사용 팁 및 예제 "

" Python 코드 스캐닝: Python 코드 형식 지정을 위한 강력한 도구 - yapf 자세한 설명 및 모범 사례 "

" Python 코드 스캐닝: 한 번의 클릭으로 Python 코드 형식을 지정하는 마법 - 블랙 사용법 튜토리얼 "

" Python 코드 스캔: Import 문 자동 정렬 도구-isor 사용 가이드 및 예제 "

" Python 코드 스캐닝: Python 코드 스타일을 자동으로 복구하는 도구 - autopep8 자세한 설명 및 예제 "

" Python 코드 스캐닝: 기업 수준의 코드 보안 취약점 스캐닝 밴디트 "

산적이란 무엇입니까?

Bandit은 Python 코드의 보안 문제를 탐지하는 데 사용되는 Python 기반 코드 보안 취약점 검색 도구입니다. 이는 개발자가 코드의 보안 취약성을 즉시 발견 및 복구하고 소프트웨어 보안을 향상시키는 데 도움이 될 수 있습니다. Bandit은 표준 라이브러리의 AST 모듈을 사용하여 Python 소스 코드를 Python 구문 노드로 구성된 트리로 구문 분석합니다. Bandit을 사용하면 사용자가 사용자 정의 테스트를 작성할 수 있습니다. 테스트가 완료된 후 Bandit은 소스 코드에 대한 보안 보고서를 생성합니다.

특징

Python Bandit의 특징은 다음과 같습니다.

1. 정적 코드 분석: Python Bandit은 소스 코드를 정적으로 분석하여 보안 취약점을 검사하고 코드를 실행하지 않고도 잠재적인 보안 문제를 찾을 수 있습니다.

2. 사용자 정의 규칙(다중 취약점 탐지 규칙): Python Bandit은 일련의 기본 규칙을 제공합니다. 내장된 다중 취약점 탐지 규칙에는 코드 주입, XSS 공격, SQL 주입 등이 포함되며 사용자 정의 규칙도 지원합니다. 특정 보안 요구 사항을 충족하기 위해 프로젝트의 요구 사항을 기반으로 자체 규칙을 정의할 수 있습니다.

3. 고급 탐지: Python Bandit은 코드 삽입, XSS 공격, 민감한 정보 유출, 취약한 비밀번호 등과 같은 다양한 일반적인 보안 문제를 탐지할 수 있습니다. 일련의 알고리즘과 패턴 일치 기술을 사용하여 감지 정확도를 향상시킵니다.

4. 보고서 생성: Python Bandit은 각 보안 문제에 대한 설명, 위치 및 권장 수정 사항을 포함하는 자세한 보고서를 생성할 수 있습니다. 이러한 보고서는 보안 문제를 신속하게 찾아 해결하는 데 도움이 됩니다.

5. 쉬운 통합 및 유연한 구성 옵션: Bandit은 다른 도구(예: CI/CD 도구, 편집기 플러그인-PyCharm 등)와 통합되어 자동 검색을 용이하게 할 수 있습니다. 동시에 Bandit은 프로젝트 요구 사항에 따라 사용자 정의할 수 있는 풍부한 구성 옵션을 제공합니다.

이 툴의 소스코드와 원리에 대한 자세한 분석은 추후에 진행할 예정이며, 공식 계정 CTO Plus 팔로우를 통한 글 환영합니다. 궁금한 사항이 있으시면 백그라운드로 메시지를 남겨주세요.

설치 및 구성

Python Bandit을 사용하는 것은 매우 쉽습니다. 다음 단계를 따르십시오.

1. Python Bandit 설치: Python Bandit은 아래와 같이 pip 명령을 통해 설치할 수 있습니다.

pip 설치 도둑

설치가 완료되면 D:\env311\Scripts 디렉터리에서 실행 파일 bandit.exe를 볼 수 있습니다.

산적 구성

Bandit은 기본적으로 구성이 필요하지 않습니다. 프로젝트의 실제 요구 사항에 따라 일부 구성을 수행해야 하는 경우 bandit.yaml이라는 구성 파일을 전달할 수 있습니다. 프로젝트 루트 디렉터리에 파일을 생성하고 규칙을 지정할 수 있습니다. 확인해야 할 규칙 기타 구성 옵션 다음은 간단한 구성 파일 예입니다.

include:
  - "*.py"

exclude:
  - "tests/*"

plugins:
  blacklist_calls:  # 检测黑名单函数调用
    functions:
      - os.system
      - subprocess.Popen

위 구성 파일에서 include는 검사해야 할 파일을 지정하고, 제외는 검사에서 제외해야 하는 파일이나 디렉터리를 지정하며, 플러그인은 검사해야 하는 규칙과 블랙리스트 함수 호출을 지정합니다.

Pycharm은 외부 도구를 구성합니다.

Bandit은 PyCharm에서 외부 도구로 설치할 수 있습니다. 기본 설정을 열고 도구 > 외부 도구로 이동합니다. 여기에서 다음 구성으로 새 도구를 추가합니다. 다른 구성 옵션에 대해서는 공식 문서를 참조하세요. 내 구성 옵션은 다음과 같습니다.

구성이 완료되면 PyCharm에서 autopep8 도구를 사용할 수 있습니다.

연습을 활용하세요

Bandit을 사용하여 코드 보안 취약점을 검색할 때 고려해야 할 몇 가지 모범 사례는 다음과 같습니다.

1. 버전 관리와 결합: 버전 관리 시스템과 함께 Bandit의 스캐닝 작업을 사용하는 것이 좋습니다. 이를 통해 코드 제출 전이나 지속적인 통합 환경에서 검색 작업을 수행할 수 있으므로 적시에 코드의 보안 문제를 발견하고 수정할 수 있습니다.

2. 편집기 플러그인과 협력: Bandit은 많은 인기 편집기(예: VS Code, PyCharm 등)와의 플러그인 통합을 제공합니다. 해당 플러그인을 설치하면 에디터에서 실시간으로 코드 보안 취약점을 확인하고 적시에 피드백을 제공하여 코드 품질을 향상시킬 수 있습니다.

3. 정기적인 검사 및 업데이트: 코드 보안 취약점은 역동적인 문제이며, 새로운 취약점과 공격 방법이 지속적으로 등장하고 있습니다. 따라서 정기적으로 Bandit을 사용하여 코드 보안 취약점을 검사하고, 적시에 Bandit 도구 및 규칙을 업데이트하여 코드 보안을 보장하는 것이 좋습니다.

4. 다른 도구와 결합: Bandit은 뛰어난 코드 보안 취약점 검색 도구이지만 이것이 유일한 옵션은 아닙니다. 실제 사용에서는 다른 보안 스캐닝 도구(예: OWASP ZAP, SonarQube 등)와 결합하여 포괄적인 스캐닝을 수행하여 코드 보안을 더욱 향상시킬 수 있습니다. 이러한 기타 보안 검사 도구에 대해서는 나중에 SDLC 제품 개발 과정에서 자세히 소개할 예정이며, CTO Plus 에 관한 기술 기사를 계속 지켜봐 주시기 바랍니다.

명령줄 매개변수

다음은 Bandit 도구에서 일반적으로 사용되는 명령줄 매개변수 몇 가지를 요약한 것입니다. 다른 내용은 공식 문서를 참조하세요.

--recursive: 디렉터리의 모든 파일을 반복적으로 처리합니다.

--exclude=<패턴>: 제외할 파일 또는 디렉터리 패턴을 설정합니다.

--configfile=<파일>: 구성 파일을 지정합니다.

다음으로 몇 가지 사용 방법과 예를 소개하겠습니다.

단일 파일 확인

다음 명령을 사용하여 단일 Python 파일에서 보안 취약점을 검사할 수 있습니다.

산적 /path/to/file.py

그러면 파일에 보안 취약성 문제와 잠재적인 위험이 출력됩니다.

전체 디렉토리를 확인하세요

다음 명령을 사용하여 전체 디렉터리의 모든 Python 파일에서 보안 취약점을 검사할 수 있습니다.

bandit --recursive /path/to/directory

그러면 디렉터리를 재귀적으로 탐색하여 모든 Python 파일에 보안 취약점이 있는지 검사합니다.

PyCharm 에서 단일 파일 또는 프로젝트 디렉터리 스캔

그러면 지정된 경로 아래의 모든 Python 파일을 검사하고 해당 보안 보고서가 생성됩니다. Bandit의 출력에는 취약점 수준, 취약점 유형, 취약점 설명 및 코드 위치와 같은 정보가 포함됩니다. 개발자는 출력 결과를 기반으로 코드의 보안 문제를 즉시 발견하고 수정할 수 있습니다.

유스 케이스

다음 내용을 포함하는 example.py라는 Python 파일이 있다고 가정합니다.

import os

def execute_command(command):
    os.system(command)

command = input("Enter a command: ")
execute_command(command)

이 코드에는 보안상의 취약점이 있습니다. 즉, 사용자가 입력한 명령이 os.system 함수에 직접 전달되어 실행되며, 코드 주입의 위험이 있습니다.

Bandit을 사용하여 코드에서 보안 취약점을 검색할 수 있습니다. 명령은 다음과 같습니다.

산적 example.py

위 명령을 실행한 후 Bandit은 다음 결과를 출력합니다.

[기본] INFO 프로필에는 테스트/*,*.py,*.pyw,*.cgi,*.fcgi,*.pyi,*.rpy,*.wsgi,*.cpx,*.pxd,*.pyx, *.pyd,*.so,*.dll,*.pyc,*.pyo

[main] 구성을 사용하는 정보: .bandit

[main] Python 3.9.1에서 실행되는 INFO

[메인] INFO 로딩 플러그인

[주] 로드된 INFO 플러그인: BanditBasics, BanditCall, BanditImports, BanditImportsBanned, BanditImportsBlacklist, BanditImportsEnvironment, BanditImportsStdlib, BanditNodeVisitor, BanditPreloader, BanditPythonVersion, BanditSecurityGuard, BanditSecurityNodeVisitor, BanditSecurityPreloader, BanditSec uritySyntaxCheck, BanditSyntaxCheck, BanditUast, BanditVisitor, BanditVisitorBase, BanditVisitorFactory, BanditVisitorPreloader

[main] OS Posix에서 실행되는 INFO

[main] INFO [bandit.core.manager] 문제 [B607:blacklist_calls] 하위 프로세스 모듈과 관련된 가능한 보안 영향을 고려하십시오.

[main] INFO [bandit.core.manager] 문제 [B607:blacklist_calls] os.system 기능과 관련된 가능한 보안 영향을 고려하십시오.

[main] INFO [bandit.core.manager] 문제 [B701:blacklist] 안전하지 않을 수 있는 기능 사용 - 대신 더 안전한 'subprocess.run' 사용을 고려하세요.

위 결과에서 알 수 있듯이 Bandit은 코드의 보안 취약점을 탐지하고 이에 대한 경고 정보를 제공했습니다.

Bandit의 출력에 따르면 코드 내 블랙리스트 함수 호출에 문제가 있음을 확인할 수 있으며, 대신 보다 안전한 함수를 사용하는 것이 좋습니다.

애플리케이션 시나리오

Python Bandit은 많은 프로젝트, 특히 사용자 입력 및 민감한 데이터 처리와 관련된 프로젝트에 적용될 수 있습니다. 다음은 제가 요약한 Python Bandit의 몇 가지 애플리케이션 시나리오입니다.

1. 웹 애플리케이션: Python으로 작성된 웹 애플리케이션의 경우 Python Bandit은 XSS 공격, SQL 주입, 코드 내 명령 주입과 같은 보안 문제를 확인하는 데 도움이 될 수 있습니다.

2. 코드 검토(코드 보안): API를 개발하고 배포할 때 Python Bandit은 민감한 정보 유출, 권한 문제, 크로스 사이트 요청 위조(CSRF)와 같은 코드의 보안 취약성을 확인하는 데 도움을 줄 수 있습니다.

3. 데이터 처리: 사용자 비밀번호 및 신용 카드 정보와 같은 민감한 데이터를 처리하는 프로젝트의 경우 Python Bandit은 코드의 보안 문제를 확인하여 데이터 보안을 보장하는 데 도움을 줄 수 있습니다.

4. 오픈 소스 프로젝트: Python으로 작성된 오픈 소스 프로젝트의 경우 Python Bandit은 코드의 보안 문제를 확인하여 프로젝트의 품질과 안정성을 향상시키는 데 도움을 줄 수 있습니다.

요약하다

Python Bandit은 Python 코드의 보안 취약성을 확인하는 데 도움이 되는 강력한 도구입니다. 코드를 정적으로 분석하여 잠재적인 보안 문제를 찾아내고 자세한 보고서를 생성합니다. 보고서의 권장 사항을 사용하여 코드의 보안 문제를 해결함으로써 코드의 품질과 안정성을 향상시킬 수 있습니다. 웹 애플리케이션, API 개발, 데이터 처리 및 오픈 소스 프로젝트와 같은 시나리오에서 Python Bandit은 코드 보안을 보장하는 데 중요한 역할을 할 수 있습니다.

참고자료

  1. Bandit에 오신 것을 환영합니다 — Bandit 문서
  2. GitHub - PyCQA/bandit: Bandit은 Python 코드에서 일반적인 보안 문제를 찾기 위해 설계된 도구입니다.
  3. Python 코드 사양: 엔터프라이즈 수준 코드 정적 스캐닝 - 코드 사양, 논리, 구문, 보안 검사 및 코드 사양 자동 배열(1)_pycharm 코드 사양 확인_SteveRocket의 블로그-CSDN 블로그
  4. https://blog.csdn.net/zhouruifu2015/article/details/129877179

Python 칼럼
https://blog.csdn.net/zhouruifu2015/category_5742543


자세한 내용 · 위챗 공개계정 [ CTO Plus ]를 검색하시고 팔로우하시면 더 많은 정보를 얻으실 수 있습니다. 함께 배우고 소통합시다.

공개 계정에 대한 설명을 보려면 다음 링크를 방문하세요.


더 많은 설렘을 원하시면 공식 계정을 팔로우하여 함께 배우고 성장하세요

Articulate 소개 "지식과 기술의 포터가 되십시오. 평생 학습 열광자가 되십시오. 깊이와 폭을 갖춘 기술 집단이 되십시오." 저는 항상 전문 분야에서 기술을 개발하고 싶었습니다 https://mp.weixin.qq. com icon-default.png?t=N7T8/ s?__biz=MzIyMzQ5MTY4OQ==&mid=2247484278&idx=1&sn=2b774f789b4c7a2ccf10e465a1b9def6&chksm=e81c2070df6ba966026fd7851efa824b5e2704e3fd34e 7 6228ca4ce64d93f7964cd4abe60f2b#rd

표준 도서관 시리즈 추천 도서:

추천
도서:

추천

출처blog.csdn.net/zhouruifu2015/article/details/131264465