Avastage Bandit, võimas Pythoni turvalisuse lintimise tööriist. Õppige tuvastama levinud turvaauke, rakendama turvalisi kodeerimispraktikaid ja parandama oma tarkvara üldist turvalisust.
Bandit turvalisuse lintimine: Pythoni turvaaukude tuvastamine ja leevendamine
Tänapäeva keerulises küberturvalisuse maastikus on ennetavad turvameetmed ülimalt olulised. Python, mis on tuntud oma mitmekülgsuse ja kasutuslihtsuse poolest, on populaarne valik erinevate rakenduste jaoks. Kuid nagu iga programmeerimiskeel, võib ka Pythoni kood olla vastuvõtlik turvaaukudele. Siin tuleb mängu Bandit – võimas turvalisuse lintimise tööriist, mis on loodud Pythoni koodi potentsiaalsete turvavigade automaatseks tuvastamiseks.
Mis on Bandit?
Bandit on avatud lähtekoodiga turvalisuse linter, mis on spetsiaalselt loodud Pythoni jaoks. See töötab Pythoni koodi skannides, et leida levinud turvaprobleeme, kasutades potentsiaalsete turvaaukude tuvastamiseks põhjalikku pistikprogrammide komplekti. Mõelge sellele kui staatilise analüüsi tööriistale, mis aitab teil turvaprobleeme arendustsükli alguses avastada, enne kui neid saab tootmises ära kasutada.
Bandit töötab Pythoni koodi parsimise ja abstraktse süntaksipuu (AST) loomise teel. Seejärel rakendab see AST-le rea teste, mis põhinevad teadaolevatel turvaaukude mustritel. Kui leitakse potentsiaalne turvaprobleem, teatab Bandit sellest koos tõsidusastme, usaldusväärsuse taseme ja probleemi üksikasjaliku kirjeldusega.
Miks kasutada Banditi?
Banditi integreerimine oma arendusvoogu pakub mitmeid olulisi eeliseid:
- Varajane turvaaukude tuvastamine: Bandit aitab teil turvaauke varakult arendusprotsessis tuvastada, vähendades hiljem nende parandamiseks vajalikke kulusid ja pingutusi.
- Parem koodi kvaliteet: Turvaliste kodeerimispraktikate jõustamisega aitab Bandit kaasa üldisele koodi kvaliteedile ja hooldatavusele.
- Automatiseeritud turvaauditid: Bandit automatiseerib turvaauditi protsessi, muutes koodi turvalisuse parimate tavade järgimise lihtsamaks.
- OWASP Top 10 katvus: Bandit sisaldab teste, mis käsitlevad paljusid OWASP Top 10-s loetletud turvaauke, aidates teil kaitsta end levinud veebirakenduste turvariskide eest.
- Kohandatavad reeglid: Saate Banditi reegleid kohandada vastavalt oma konkreetsetele turvanõuetele ja kodeerimisstandarditele.
- Integratsioon CI/CD torujuhtmetega: Banditi saab hõlpsasti integreerida oma pideva integreerimise/pideva juurutamise (CI/CD) torujuhtmetega, tagades, et turvakontrolle tehakse automaatselt iga koodimuudatuse korral.
Banditiga alustamine
Siin on samm-sammult juhend Banditiga alustamiseks:
1. Installimine
Saate Banditi installida pip-i, Pythoni pakihalduri abil:
pip install bandit
2. Banditi käivitamine
Banditi käivitamiseks Pythoni koodis kasutage järgmist käsku:
bandit -r <directory>
Asendage <directory>
kataloogiga, mis sisaldab teie Pythoni koodi. Lipp -r
käsib Banditil rekursiivselt skannida kõiki määratud kataloogi Pythoni faile.
Saate määrata ka üksikuid faile:
bandit <file1.py> <file2.py>
3. Tulemuste tõlgendamine
Bandit väljastab aruande, milles on üksikasjalikult kirjeldatud kõik teie koodist leitud potentsiaalsed turvaaugud. Iga turvaaugule on määratud tõsidusaste (nt KÕRGE, KESKMINE, MADAL) ja usaldusväärsuse tase (nt KÕRGE, KESKMINE, MADAL). Aruanne sisaldab ka turvaaugu üksikasjalikku kirjeldust ja koodirida, kust see leiti.
Banditi näidisväljund:
./example.py:10:0:B603 [blacklist] Use of subprocess.Popen with shell=True is known to be vulnerable to shell injection
Severity: High Confidence: High
Location: ./example.py:10
--------------------------------------------------
See väljund näitab, et Bandit leidis failis example.py
reas 10 kõrge tõsidusastmega turvaaugu. Turvaauk on seotud subprocess.Popen
kasutamisega koos shell=True
, mis on teadaolevalt vastuvõtlik shelli süstimise rünnakutele.
Levinud turvaaugud, mida Bandit tuvastab
Bandit suudab tuvastada Pythoni koodi laia valiku levinud turvaauke. Siin on mõned näited:
- Shelli süstimine (B602, B603):
subprocess.Popen
võios.system
kasutamine koos usaldamatu sisendiga võib põhjustada shelli süstimise rünnakuid. - SQL süstimine (B608): SQL-päringute koostamine kasutades stringi konkatenatsiooni kasutaja sisestatud andmetega võib teie rakenduse SQL süstimise rünnakutele avada.
- Koodi sisse kodeeritud paroolid (B105): Paroolide otse koodis salvestamine on suur turvarisk.
- Nõrk krüptograafia (B303, B304, B322): Nõrkade või aegunud krüptograafiliste algoritmide kasutamine võib kahjustada teie andmete konfidentsiaalsust ja terviklikkust.
- Ebaturvaline deserialiseerimine (B301, B401): Andmete deserialiseerimine usaldamatutest allikatest võib põhjustada suvalise koodi käivitamist.
- XML-i välise olemuse (XXE) süstimine (B405): XML-dokumentide parsimine usaldamatutest allikatest ilma nõuetekohase puhastamiseta võib teie rakenduse XXE süstimise rünnakutele avada.
- Stringivormingu haavatavused (B323): Kasutaja sisestatud andmete kasutamine vormingu stringides ilma nõuetekohase puhastamiseta võib põhjustada vormingu stringi haavatavusi.
- Funktsioonide `eval()` või `exec()` kasutamine (B301): Need funktsioonid käivitavad suvalist koodi ja nende kasutamine usaldamatu sisendiga on äärmiselt ohtlik.
- Ebaturvaline ajutiste failide kasutus (B308): Ajutiste failide loomine prognoositavasse asukohta võib võimaldada ründajatel tundlikke andmeid üle kirjutada või lugeda.
- Puuduv või vale veakäsitlus (B110): Erandite mitte korrektsel käsitlemisel võib paljastada tundlikku teavet või viia teenusetõkestusrünnakuteni.
Näide: Shelli süstimise haavatavuse tuvastamine ja parandamine
Vaatame lihtsat näidet selle kohta, kuidas Bandit saab aidata teil tuvastada ja parandada shelli süstimise haavatavust.
Võtke arvesse järgmist Pythoni koodi:
import subprocess
import os
def execute_command(command):
subprocess.Popen(command, shell=True)
if __name__ == "__main__":
user_input = input("Enter a command to execute: ")
execute_command(user_input)
See kood võtab kasutaja sisendi ja käivitab selle shelli käsklusega, kasutades subprocess.Popen
koos shell=True
. See on klassikaline näide shelli süstimise haavatavusest.
Banditi käivitamine sellel koodil loob järgmise väljundi:
./example.py:4:0:B603 [blacklist] Use of subprocess.Popen with shell=True is known to be vulnerable to shell injection
Severity: High Confidence: High
Location: ./example.py:4
--------------------------------------------------
Bandit tuvastab õigesti subprocess.Popen
kasutamise koos shell=True
kui kõrge tõsidusastmega turvaaugu.
Selle turvaaugu parandamiseks peaksite vältima shell=True
kasutamist ja edastama käsu ja selle argumendid selle asemel loendina subprocess.Popen
. Samuti peaksite kasutaja sisendi puhastama, et vältida pahatahtlike käskude süstimist.
Siin on koodi parandatud versioon:
import subprocess
import shlex
def execute_command(command):
# Sanitize the input using shlex.split to prevent shell injection
command_list = shlex.split(command)
subprocess.Popen(command_list)
if __name__ == "__main__":
user_input = input("Enter a command to execute: ")
execute_command(user_input)
Kasutades shlex.split
kasutaja sisendi puhastamiseks ja edastades käsu loendina subprocess.Popen
, saate vähendada shelli süstimise rünnakute ohtu.
Banditi käivitamine parandatud koodil ei teata enam shelli süstimise haavatavusest.
Banditi konfigureerimine
Banditi saab konfigureerida konfiguratsioonifaili (bandit.yaml
või .bandit
) abil, et kohandada selle käitumist. Konfiguratsioonifaili abil saate:
- Välistada faile või katalooge: Määrake failid või kataloogid, mis tuleks skannimisest välja jätta.
- Keelata konkreetsed testid: Keelake testid, mis pole teie projekti jaoks asjakohased.
- Reguleerida tõsidusastmeid: Muutke konkreetsete turvaaukude tõsidusastmeid.
- Määratleda kohandatud reegleid: Looge oma kohandatud reeglid projektispetsiifiliste turvaprobleemide tuvastamiseks.
Siin on näide bandit.yaml
konfiguratsioonifailist:
exclude:
- 'tests/'
- 'docs/'
skips:
- 'B101'
confidence_level:
MEDIUM:
- 'B603'
severity_level:
LOW:
- 'B105'
See konfiguratsioonifail välistab skannimisest kataloogid tests/
ja docs/
, jätab vahele testi B101
(mis kontrollib väidete kasutamist), reguleerib testi B603
usaldusväärsuse taseme KESKMISEKS ja reguleerib testi B105
tõsidusastme MADALAKS.
Banditi integreerimine oma CI/CD torujuhtmesse
Banditi integreerimine oma CI/CD torujuhtmesse on Pythoni koodi turvalisuse tagamisel ülioluline samm. Käivitades Banditi automaatselt iga koodimuudatuse korral, saate turvaauke varakult avastada ja vältida nende tootmisse jõudmist.
Siin on näide selle kohta, kuidas integreerida Bandit GitLab CI/CD torujuhtmesse:
stages:
- test
bandit:
image: python:3.9
stage: test
before_script:
- pip install bandit
script:
- bandit -r .
artifacts:
reports:
bandit: bandit.report
See konfiguratsioon määratleb bandit
töö, mis käivitab Banditi praeguses kataloogis. Töö kasutab Python 3.9 Docker image'i ja installib Banditi pip abil. Käsk bandit -r .
käivitab Banditi rekursiivselt kõigil praeguse kataloogi Pythoni failidel. Jaotis artifacts
määrab, et Banditi aruanne tuleks salvestada artefaktina, mida saab alla laadida ja üle vaadata.
Sarnaseid konfiguratsioone saab luua ka teistele CI/CD platvormidele, nagu Jenkins, CircleCI ja GitHub Actions.
Enam kui Bandit: Põhjalikud turvastrateegiad
Kuigi Bandit on väärtuslik tööriist potentsiaalsete turvaaukude tuvastamiseks, on oluline meeles pidada, et see on vaid üks osa terviklikust turvastrateegiast. Muud olulised turvapraktikad hõlmavad järgmist:
- Turvalised kodeerimispraktikad: Järgige turvalisi kodeerimisjuhiseid ja parimaid praktikaid, et minimeerida haavatavuste koodi sisestamise ohtu.
- Regulaarsed turvaauditid: Viige läbi regulaarseid turvaauditeid, et tuvastada ja kõrvaldada oma rakenduse potentsiaalsed turvanõrkused.
- Penetration testimine: Tehke penetration testimist, et simuleerida reaalseid rünnakuid ja tuvastada haavatavusi, mida staatilise analüüsi tööriistad, nagu Bandit, ei pruugi tuvastada.
- Haavatavuse haldamine: Rakendage haavatavuse haldamise programm, et jälgida ja kõrvaldada oma tarkvara ja infrastruktuuri haavatavusi.
- Sõltuvuste haldamine: Hoidke oma sõltuvused ajakohasena, et parandada teadaolevaid haavatavusi kolmandate osapoolte teekides. Tööriistad nagu `pip-audit` ja `safety` võivad selles aidata.
- Sisendi valideerimine ja puhastamine: Valideerige ja puhastage alati kasutaja sisendit, et vältida süstimise rünnakuid ja muid sisendiga seotud haavatavusi.
- Autentimine ja autoriseerimine: Rakendage tugevad autentimis- ja autoriseerimismehhanismid, et kaitsta tundlikke andmeid ja ressursse.
- Turvateadlikkuse koolitus: Pakkuge oma arendajatele ja teistele töötajatele turvateadlikkuse koolitust, et teavitada neid levinud turvaohtudest ja parimatest tavadest.
Kokkuvõte
Bandit on väärtuslik tööriist Pythoni koodi turvaaukude tuvastamiseks ja leevendamiseks. Integreerides Banditi oma arendusvoogu, saate parandada oma rakenduste turvalisust ja kaitsta end levinud turvaohtude eest. Siiski on oluline meeles pidada, et Bandit on vaid üks osa terviklikust turvastrateegiast. Järgides turvalisi kodeerimispraktikaid, korraldades regulaarseid turvaauditeid ja rakendades muid turvameetmeid, saate luua turvalisema ja vastupidavama tarkvarakeskkonna.