Qual è un buon modo per preparare questo corso intitolato "Programming Language Security"?

2

Ho un corso con la seguente descrizione:

The purpose of this course is the study of programming language security features and languages designed to support it explicitly. Static and dynamic constructs for security in languages and systems, as well as software engineering security principles/patterns.

Topics:

  • Basic Programming Language security framework.
  • Designing secure programming languages
  • Access control in programming languages
  • Information flow languages
  • Capability Languages
  • Mobile programming languages
  • Software Engineering and Security
  • Basic software vulnerabilities in systems
  • Secure Software Engineering life-cycle
  • Patterns, and Practices for software security

Sono confuso - In che modo la sicurezza PL è diversa dalla normale sicurezza? Sto cercando possibili libri di testo / libri da studiare, o siti web che sono buoni in questo argomento, o eventuali consigli / suggerimenti. Il professore mi ha detto di conoscere bene C e Java, questo è tutto ciò che so finora.

Apprezzo qualsiasi consiglio o consiglio.

    
posta Adel 13.12.2011 - 01:21
fonte

7 risposte

4

La sicurezza (essendo correlata ai PL) è strettamente correlata alla nozione di correttezza . Se la tua implementazione linguistica può garantire che un certo vincolo rimarrà sempre, consente una sicurezza migliore rispetto ad una lingua meno ristretta. Ad esempio, se è garantito che un accesso dell'array fuori limite è impossibile o attiverà un'eccezione, il tuo codice è già al sicuro da una gamma molto ampia di possibili exploit di sicurezza.

Se una lingua ti permette di motivo su certi aspetti del comportamento del tuo codice, è più adatto per la codifica sicura di una lingua con un alto grado di imprevedibilità. Considera il confronto, ad esempio, C, con qualcosa come Coq o Agda2.

    
risposta data 13.12.2011 - 11:23
fonte
1

All'università il mio compagno di stanza si è preparato per un corso del genere imparando a manipolare la memoria per un gioco online che ha giocato. Lo ha motivato a rispolverare le sue abilità (e il suo assemblaggio) e gli ha dato anche la motivazione per imparare i dettagli del compilatore e la manipolazione della memoria / puntatore. Alla fine, quando ha dovuto lavorare su un progetto, avrebbe semplicemente giocato / hackerato il suo gioco ... i cui risultati sono diventati il suo progetto del semestre.

    
risposta data 13.12.2011 - 03:28
fonte
1

PL La sicurezza non è fondamentalmente diversa dalla sicurezza fisica del mondo reale, peccato che gran parte del settore debba ancora rendersene conto.

Alcune lingue rendono più facile spararti nel piede (C) rispetto ad altri (Java), ma puoi farlo in qualsiasi lingua se ci provi abbastanza.

Leggendo i lavori successivi di Bruce Schneier e alcuni numeri arretrati della sua lettera mensile di notizie, vi forniremo alcune informazioni reali su ciò che non funziona.

    
risposta data 13.12.2011 - 08:14
fonte
1

Ci sono linee guida per la codifica sicure per Java , che è un elenco molto dettagliato di "suggerimenti" "in particolare relativo a Java (e spiegano cosa potrebbe accadere se tu. È passato un po 'di tempo da quando usavo C, ma per quanto riguarda C # che uso frequentemente ci sono obsoleti (perché è per .NET 2.0) le linee guida sulla sicurezza , sono ancora una buona lettura generale. Ora, questo è legato alla sicurezza PL.

Per quanto riguarda la sicurezza dell'ingegneria del software, MSDN Magazine ad esempio ha un Security portale che contiene (clicca su "Impara") molti articoli / storie interessanti relativi alla scrittura di applicazioni sicure indipendentemente dal linguaggio di programmazione utilizzato. Non è necessariamente correlato a C #, VB.Net o altri linguaggi Microsoft specifici. Aggiungerò qui un articolo molto interessante che ho appena letto ieri: Lezioni apprese da cinque anni di costruzione più sicura Software , ma ce ne sono molti altri.

    
risposta data 13.12.2011 - 11:09
fonte
1

Il modo migliore per prepararsi al corso è acquistare il libro in anticipo e iniziare a leggerlo.

So che può essere noioso, ma i libri di testo sono in realtà progettati per insegnarti il materiale.

Se vuoi andare avanti, scavare e iniziare a leggere.

    
risposta data 13.12.2011 - 23:54
fonte
1

Ogni sistema fornisce il proprio modello di interazioni e il proprio insieme di invarianti. Un linguaggio di programmazione è un'opportunità per fornire un modello di sicurezza diverso dal modello host (OS), a grana fine o semplicemente adatto a uno scopo diverso (più specializzato).

Ad esempio, il modello di sicurezza del sistema operativo è in genere organizzato attorno a utenti / ruoli / gruppi e alle risorse (file, socket, syscalls) a cui è consentito l'accesso. Il modello di sicurezza JavaScript-in-a-browser, d'altra parte, riguarda i domini di origine, il codice JS e gli oggetti DOM. Dal punto di vista del sistema operativo, un browser è solo un programma gestito da un singolo utente che presumibilmente ha il permesso di accedere all'intero Internet raggiungibile e di accedere a tutti i file dell'utente. Dal punto di vista di JS, tuttavia, il tuo server adorabile-gattino preferito non dovrebbe essere in grado di leggere le tue pagine o le tue credenziali online.

Quindi, la sicurezza PL ha una gamma più ampia di obiettivi, che si traducono in diversi tipi di modelli di sicurezza e tecniche differenti per applicarli.

    
risposta data 14.12.2011 - 04:47
fonte
1

Cercherò informazioni relative all'idea di "stato" nei linguaggi di programmazione, nonché agli input di analisi e ai meccanismi della memoria. Un numero elevato di violazioni della sicurezza si verificano a causa di stato incerto, input non correttamente rilevati o errori di overflow di memoria. Lo stack-Exchange per la sicurezza IT potrebbe essere un buon posto per curiosare. Detto questo, leggere il libro per il corso è una buona opzione e sottolinea Richard .

    
risposta data 14.12.2011 - 07:13
fonte