Una breve panoramica sulla revisione del codice

May 07 2023
Ciao a tutti!! Spero tu stia bene. Perché questo blog? Quando ho iniziato ad acquisire competenze nei test di penetrazione, i primi mesi del mio apprendimento hanno comportato il copia-incolla dei payload e la replica di ciò che facevano gli altri.

Ciao a tutti!! Spero tu stia bene.

Perché questo blog?

Quando ho iniziato ad acquisire competenze nei test di penetrazione, i primi mesi del mio apprendimento hanno comportato il copia-incolla dei payload e la replica di ciò che facevano gli altri. Non avevo idea di come eseguire un pentest/hacking, questo ha reso la maggior parte del mio hacking un'esperienza sgradevole. Mi sono reso conto che il problema ovvio era il mio approccio all'apprendimento, ero troppo occupato a trovare vulnerabilità ma non mi interessava mai conoscere i motivi per cui esiste una vulnerabilità.

Per cambiare il mio approccio ho iniziato a imparare un po' di programmazione e ho iniziato a programmare strumenti in Python o Bash che usavo quotidianamente. Quando ho iniziato il mio primo tirocinio, ho insistito che i miei anziani mi assegnassero progetti di analisi statica del codice sorgente. Non solo i miei anziani mi hanno assegnato il progetto, ma mi hanno anche aiutato a completarlo con successo guidandomi durante tutto il progetto. Durante la mia prima revisione del codice su un progetto reale, ho capito per la prima volta perché esisteva una vulnerabilità in un'applicazione. Questa esperienza mi ha dato una prospettiva su come pensano gli sviluppatori e quali errori commettono comunemente durante la programmazione, questo è ciò che mi ha fatto iniziare a rivedere i codici e mi ha aiutato a migliorare le mie capacità.

Sapevo di non essere il solo a vivere questa esperienza e molti lo fanno ancora, quindi ho deciso di scrivere questo blog. Ora, senza ulteriori indugi, passiamo subito alle basi di esso, o quello che ho imparato finora.

Cos'è la revisione del codice?

La revisione sicura del codice è il processo di esame del codice sorgente di un'applicazione per migliorare la posizione di sicurezza complessiva dell'applicazione. Può essere automatizzato (linguaggio, framework specifico) o può essere manuale. L'obiettivo non è solo identificare le falle di sicurezza all'interno del codice sorgente, ma anche fornire una mitigazione valida e introdurre pratiche di codice sicuro all'interno del ciclo di sviluppo per prevenire la preparazione dell'implementazione di codice non sicuro.

Vantaggi dell'apprendimento della revisione del codice sorgente:

  1. Fornisce una comprensione più profonda di come pensa uno sviluppatore e di come le funzionalità possono essere sfruttate.
  2. Se sei un Pentester, capiresti in primo luogo perché esiste un bug.
  3. Ti aiuta a trovare più bug nella vita reale, ora che sai come uno sviluppatore pensa e implementa un pezzo di codice, puoi trovare una soluzione alternativa per la stessa funzionalità e sfruttarla.
  4. Ti aiuta a trovare informazioni sensibili relative al tuo obiettivo, istanze acute come chiavi AWS, token di autenticazione, chiavi API, credenziali hardcoded, file esposti e altro ancora.

Prima di apprendere il modo corretto di rivedere il codice, nei primi giorni della mia revisione del codice, mi sono concentrato principalmente sulla configurazione errata della sicurezza e sulle informazioni sensibili codificate.

Considera, se il mio codice di destinazione era basato su ASP.NET, mi sono concentrato sui risultati principali come:

1. Informazioni sensibili hardcoded come credenziali, chiave API, token segreti ecc

Importa il codice che stai rivedendo in qualsiasi editor di codice (preferisco VS Code) e inizia a cercare parole chiave come:

  • password / pwd / passwd / pass / password / admin_passwd / adminpasswd / adminPass
  • Chiave_API / chiave API / chiave API
  • Segreto / Chiave_Segreta / skey / chiave privata / chiave_privata / pkey

2. Errata configurazione della sicurezza

UN. Errori personalizzati

Prendi l'XML di seguito come esempio, qui stiamo controllando se il codice ASP.NET ha implementato la gestione degli errori personalizzata, in caso contrario, le informazioni sensibili possono essere divulgate sul lato client tramite traccia dello stack o errori predefiniti.

  • Codice di sicurezza:
  • <configuration>
       <system.web>
          <customErrors mode="Off">
    

    <customErrors mode="RemoteOnly"  
      defaultRedirect="customerror.htm">  
        <error statusCode="404" redirect="customerror404.htm"/>  
    </customErrors>
    

  • Codice configurato in modo errato:
  • <configuration>
       <system.web>
          <httpCookies httpOnlyCookies="false">
    

    <configuration>
       <system.web>
          <httpCookies httpOnlyCookies="true">
    

La revisione del codice richiede abilità come il riconoscimento di schemi, la programmazione, l'identificazione di elementi/funzioni vulnerabili e molto altro ancora. Prendi l'esempio seguente:

...
string userName = ctx.getAuthenticatedUserName();
string query = "SELECT * FROM items WHERE owner = '" + userName + "' AND itemname = '" + ItemName.Text + "'";
sda = new SqlDataAdapter(query, conn);
DataTable dt = new DataTable();
sda.Fill(dt);
...

Il codice precedente costruisce dinamicamente una query SQL in cui la query restituisce i dati in cui il "proprietario" corrisponde al nome utente. Con la presente eseguendo una concatenazione diretta dell'input dell'utente "userName" con la query SQL anziché utilizzare istruzioni parametrizzate per eliminare eventuali vulnerabilità di SQL injection.

Idealmente, la query SQL di cui sopra dovrebbe essere costruita come segue:

SELECT * FROM items WHERE owner = {{username}} AND itemname = {{itemName}};

payload' OR '1'='1

L'istruzione precedente renderebbe la query finale come:

SELECT * FROM items WHERE owner = 'Attacker' AND itemname = 'payload' OR '1'='1';

L'errore nell'implementazione rende il frammento di codice vulnerabile agli attacchi SQL injection.

Quindi, la domanda che si pone è come rivedere tali codici? Come si fa a rivedere un codice sorgente con milioni di righe di codice? Potrebbe sembrare opprimente, ma fidati di me, ci sono molti modi efficaci per rivedere il codice. Discuteremo di più sulla revisione del codice nelle prossime parti di questa serie. Fino ad allora puoi passare attraverso un thread di Twitter che ho pubblicato per l'apprendimento della revisione del codice sorgente che puoi trovare qui .

Ho mantenuto questo blog breve e semplice per darti un'idea di cosa può essere la revisione del codice e come anche tu puoi iniziare con essa. Presto condividerò di più con voi ragazzi.

## Riferimenti:

  • https://cwe.mitre.org/data/definitions/89.html
  • https://www.c-sharpcorner.com/UploadFile/a53555/owasp-sharp5-security-misconfiguration-hardening-your-Asp-Net-a/

Anch'io sono uno studente e condivido le conoscenze che ho appreso finora. Se hai feedback che si tratti di critiche o apprezzamenti, li accolgo con tutto il cuore.

Mi trovi qui!!

  • mr_fr3qu3n533
  • Scrivimi una mail qui.