Pastebin
API
tools
faq
paste
Login
Sign up
Please fix the following errors:
New Paste
Syntax Highlighting
buffer overflow Intégrité Disponibilité Confidentialité fail-safe default : Principe de sécurité: toujours revenir à une situation stable après une erreur. (). nombre aleatoires 2^32 est une fraction suffisamment petite de 52! qu’il est possible de deviner l’agencement des cartes en cours après 1 ou 2 mains. Un nombre est aléatoire si il est pigé de manière équiprobable dans un ensemble donné, Un ensemble de nombres est aléatoire si ces nombres sont indépendants les un des autres. Il est difficile de générer des nombres aléatoires car les ordinateurs sont déterministes. middlesquare Dès qu’un 0 apparait dans la séquence il y restera jusqu’à la fin. Parfois, le patron apparaît tôt dans la séquence. Générateur congruentiel linéaire VOIR PAGE 15 True Random Number Generators variation des mouvements de la souris • bruits ambiants • lava lamp • radioactivité Deux notions doivent être testées: • L’indépendance (chaque valeur ne dépend pas des autres) • L’uniformité (toutes les valeurs possibles sont équiprobables) Il est possible qu’un générateur de nombres aléatoires réussisse un test, mais en échoue d’autres. Knuth donne une douzaine de tests et suggère de n’accepter un PRNG que s’il en réussit au moins 5 de ces tests. JAVA Initialement développé pour produire des applets qui seraient exécutés dans les navigateurs (d’où le besoin accru de sécurité). • Un des langages les plus sécuritaires et les plus utilisés aujourd’hui. • Fortement typé, orienté objet et sécuritaire. • Plus lent que les langages bas-niveau comme C ou C++, mais la performance de Java s’est grandement améliorée. Pas de pointeurs ou d’arithmétique de pointeurs, gestion automatique de la mémoire. • Pas de goto • Pas de surdéfinitions des opérateurs • Pas de valeur par défaut des paramètres • Pas d’héritage multiple • Vérification automatique systématique des bornes des tableaux et des strings WHY NO BUFFER OVERFLOW IN JAVA ?? Ceci permet une bonne granularité des permissions JAVA SECURITY POLICY Java Class Loader Le class loader associe chaque classe à un namespace, ce qui permet d’éviter la confusion entre plusieurs classes d’origines distinctes, ayant le même nom. Le code de chaque origine sera associé à un namespace différent. C’est une raison d’être importante des classloaders. Le Bytecode Verifier Permet de se protéger contre un compilateur hostile Phases 1: Vérifications syntaxiques Phases 2: Vérifications sémantiques Phases 3: Vérifications du bytecode Phases 4: Vérification des références symboliques Le Gestionnaire de Sécurité Détermine si un accès à une ressource protégée est permis C’est le principe de vérifier chaque accès à une ressource. Le gestionnaire de sécurité consulte le fichier de stratégie pour déterminer si une action est permise L’inspection de la Pile Java utilise un algorithme appelé le stack inspection L’algorithme: • Toutes les cellules d’activation sont examinées depuis la plus récente (haut de la pile) jusqu’à la plus ancienne (main). • La recherche se termine si on rencontre une cellule dont le flag d’accès est émis, l’accès est autorisé. • La recherche se termine si on rencontre une cellule externe: l’accès à la ressource est interdit. • Autrement (code local pour lequel le flag n’est pas set), la recherche se poursuit. • Si on arrive au bas de la stack, l’accès est Les attaques contre Java • Les attaques exploitent des vulnérabilités dans la JVM. • Il faut contourner la sécurité considérable du langage. • 3 types d’attaques: • Confusion des types • Class spoofing • Erreurs dans l’implantation de la JVM Toujours initialiser ses objets, ne pas dépendre de la JVM pour s’assurer qu’un objet noninitialisé n’est pas appelé. • Utiliser le principe du privilège minimal Si possible, ne pas signer votre code. Il roulera avec des privilèges minimaux, ce qui limitera les dommages qu’il peut faire. Ne pas utiliser de classes internes. En bytecode, elles seront transformées en classes normales. Comme les classes internes ont accès aux variables privées de leur classe englobante, le privilège de celle-ci est changé de private à protected. Si possible, rendre les classes non-serialisable et non-deserialisable. Fonction variadiques De façon plus générale, à chaque fois qu’un canal contient à la fois des données et des informations de contrôle, une vulnérabilité est possible (ex. anciens téléphones) Les fonctions de formatage des strings (format string functions) sont des fonctions spéciales qui prennent un nombre variable d’arguments en entrée. • Le nombre d’arguments est spécifié par la string passée en paramètre. • Aucune vérification de type ou de nombre n’est faite sur les paramètres de la fonction. une fonction variadique est une fonction d'arité indéfinie, c'est-à-dire qui accepte un nombre variable de paramètres. printf prend ses arguments dans la pile. Il n’a pas de manière de vérifier que la pile contient bien les arguments qu’il cherche. De toutes façons, la string passée en paramètre peut être dynamique alors le compilateur ne pourra jamais savoir si elle est bien formée. • Cette lacune est la cause des vulnérabilités de formatage des strings. 1er objectif: Faire “crasher” le programme. printf(“%s%s%s%s%s%s%s%s%s”); si ce n’est pas une adresse valide (ce qui est le plus probable) le programme va s’arrêter. 2e objectif: Voir le contenu de la pile. printf(“%08x. %08x. %08x. %08x. %08x”); Si on peut examiner l’output de la fonction, on peut connaître le contenu de la stack. 3e objectif: Voir des emplacements en mémoire hors de la pile: Comme avec les buffer overflows, on voudrait faire exécuter des instructions qui modifieraient le pointeur d’instruction (EIP); ou bien modifier un pointeur et la valeur qu’il écrit (subterfuge de pointeur). 4e objectif: Créer un buffer overflow. (ex. de QPOP 2.53) user =“%497d\x3c\x3d\xff\xbf<nops><shellcode>”; ? • %497d crée une string de 497 caractères. Si on ajoute la string “erreur”, on dépasse la taille maximale du buffer. • Le deuxième sprintf ne vérifie pas la taille du buffer. Il prendra les %497d comme caractères de contrôle. • \x3c\x3d\xff\xbf est l’adresse du malware dans la string user (ou quelque part dans le nop). • Le reste de l’attaque se déroulera comme un buffer overflow. 5e objectif: écrire dans un emplacement en mémoire. int i; printf ("12345%n", &i); Ce code écrit 5 dans la variable i. Usage potentiellement malicieux: int func (char *user){ printf(user); } Usage sécuritaire: int func(char * user){ printf(“%s”, user); } SOLUTIONS Format Guard Libformat Libsafe Ne jamais utiliser les fonctions variadiques sur des entrées usagers. Bonnes Pratiques de programmation 1. Économie de mécanismes: Gardez le design aussi simple que possible. Toute complexité risque une vulnérabilité. 2. Fail-safe default: Si une situation d’erreur se produit, le programme revient à une situation sécuritaire. Décision d’accès basée sur l’inclusion plûtot que l’exclusion. • White list plutôt que black list. • Par défault, aucun accès n’est acccordé. L’utilisation de systèmes sur des OS pour lesquels ils n’ont pas été initialement conçus, est une source de vulnérabilité. gérer toutes les erreurs possibles, il faut qu’il y ait un défault pour “autre erreur” 3. Médiation Complète: Chaque accès à chaque objet est verifié pour s’assurer qu’il est permis. 4. Design ouvert: Le design d’un système ne devrait pas être un secret 5. Séparation des privilèges: L’authentification se fait avec au moins deux jetons de types différents. Pour devenir admin sur UNIX, il faut connaître le mot de passe admin et avoir été désigné par un admin. 6. Principe du moindre privilège: 7. Minimiser les mécanismes communs: Si possible, utilisez des mécanismes d’accès multiples. • Attention, on parle ici des mécanismes d’accès aux ressources, pas de la réutilisation du code en général 8. La sécurité doit être psychologiquement acceptable: Toujours garder en compte l’aspect humain de la sécurité. REPONSE DE LA PAGE 23 ?????? Analyse de Risques Risque: Problème potentiel auquel un système ou ses usagers pourraient faire face. Risque = Impact x Probabilité d’occurrence 1. Éviter le risque: En changeant les pratiques de fonctionnement 2. Transférer le risque: Par exemple au moyen d’une assurance. 3. Assumer le risque: Prendre des moyens pour réduire le risque à un niveau tolérable. Actifs Intégrité Disponibilité Confidentialité La machine volée Logiciel corrompu code Perceptions vs Réalité Deux aspects largement distincts 1. Être en sécurité (par rapport à un risque particulier) 2. Se sentir en sécurité Pour juger de l’efficacité d’une contre-mesure, il faut pouvoir mesurer adéquatement: La sévérité du risque La probabilité qu’il se produise Le coût de la contre-mesure L’efficacité de la contre-mesure
Optional Paste Settings
Category:
None
Cryptocurrency
Cybersecurity
Fixit
Food
Gaming
Haiku
Help
History
Housing
Jokes
Legal
Money
Movies
Music
Pets
Photo
Science
Software
Source Code
Spirit
Sports
Travel
TV
Writing
Tags:
Syntax Highlighting:
None
Bash
C
C#
C++
CSS
HTML
JSON
Java
JavaScript
Lua
Markdown (PRO members only)
Objective C
PHP
Perl
Python
Ruby
Swift
4CS
6502 ACME Cross Assembler
6502 Kick Assembler
6502 TASM/64TASS
ABAP
AIMMS
ALGOL 68
APT Sources
ARM
ASM (NASM)
ASP
ActionScript
ActionScript 3
Ada
Apache Log
AppleScript
Arduino
Asymptote
AutoIt
Autohotkey
Avisynth
Awk
BASCOM AVR
BNF
BOO
Bash
Basic4GL
Batch
BibTeX
Blitz Basic
Blitz3D
BlitzMax
BrainFuck
C
C (WinAPI)
C Intermediate Language
C for Macs
C#
C++
C++ (WinAPI)
C++ (with Qt extensions)
C: Loadrunner
CAD DCL
CAD Lisp
CFDG
CMake
COBOL
CSS
Ceylon
ChaiScript
Chapel
Clojure
Clone C
Clone C++
CoffeeScript
ColdFusion
Cuesheet
D
DCL
DCPU-16
DCS
DIV
DOT
Dart
Delphi
Delphi Prism (Oxygene)
Diff
E
ECMAScript
EPC
Easytrieve
Eiffel
Email
Erlang
Euphoria
F#
FO Language
Falcon
Filemaker
Formula One
Fortran
FreeBasic
FreeSWITCH
GAMBAS
GDB
GDScript
Game Maker
Genero
Genie
GetText
Go
Godot GLSL
Groovy
GwBasic
HQ9 Plus
HTML
HTML 5
Haskell
Haxe
HicEst
IDL
INI file
INTERCAL
IO
ISPF Panel Definition
Icon
Inno Script
J
JCL
JSON
Java
Java 5
JavaScript
Julia
KSP (Kontakt Script)
KiXtart
Kotlin
LDIF
LLVM
LOL Code
LScript
Latex
Liberty BASIC
Linden Scripting
Lisp
Loco Basic
Logtalk
Lotus Formulas
Lotus Script
Lua
M68000 Assembler
MIX Assembler
MK-61/52
MPASM
MXML
MagikSF
Make
MapBasic
Markdown (PRO members only)
MatLab
Mercury
MetaPost
Modula 2
Modula 3
Motorola 68000 HiSoft Dev
MySQL
Nagios
NetRexx
Nginx
Nim
NullSoft Installer
OCaml
OCaml Brief
Oberon 2
Objeck Programming Langua
Objective C
Octave
Open Object Rexx
OpenBSD PACKET FILTER
OpenGL Shading
Openoffice BASIC
Oracle 11
Oracle 8
Oz
PARI/GP
PCRE
PHP
PHP Brief
PL/I
PL/SQL
POV-Ray
ParaSail
Pascal
Pawn
Per
Perl
Perl 6
Phix
Pic 16
Pike
Pixel Bender
PostScript
PostgreSQL
PowerBuilder
PowerShell
ProFTPd
Progress
Prolog
Properties
ProvideX
Puppet
PureBasic
PyCon
Python
Python for S60
QBasic
QML
R
RBScript
REBOL
REG
RPM Spec
Racket
Rails
Rexx
Robots
Roff Manpage
Ruby
Ruby Gnuplot
Rust
SAS
SCL
SPARK
SPARQL
SQF
SQL
SSH Config
Scala
Scheme
Scilab
SdlBasic
Smalltalk
Smarty
StandardML
StoneScript
SuperCollider
Swift
SystemVerilog
T-SQL
TCL
TeXgraph
Tera Term
TypeScript
TypoScript
UPC
Unicon
UnrealScript
Urbi
VB.NET
VBScript
VHDL
VIM
Vala
Vedit
VeriLog
Visual Pro Log
VisualBasic
VisualFoxPro
WHOIS
WhiteSpace
Winbatch
XBasic
XML
XPP
Xojo
Xorg Config
YAML
YARA
Z80 Assembler
ZXBasic
autoconf
jQuery
mIRC
newLISP
q/kdb+
thinBasic
Paste Expiration:
Never
Burn after read
10 Minutes
1 Hour
1 Day
1 Week
2 Weeks
1 Month
6 Months
1 Year
Paste Exposure:
Public
Unlisted
Private
Folder:
(members only)
Password
NEW
Enabled
Disabled
Burn after read
NEW
Paste Name / Title:
Create New Paste
Hello
Guest
Sign Up
or
Login
Sign in with Facebook
Sign in with Twitter
Sign in with Google
You are currently not logged in, this means you can not edit or delete anything you paste.
Sign Up
or
Login
Public Pastes
Symbol Dump for Discord
8 hours ago | 0.41 KB
tes
10 hours ago | 0.02 KB
Untitled
1 day ago | 2.28 KB
GSA NS
1 day ago | 1.37 KB
WaterFul.m
MatLab | 1 day ago | 0.42 KB
WaterEmpty.m
MatLab | 1 day ago | 0.54 KB
Spinning.m
MatLab | 1 day ago | 0.53 KB
Drying.m
MatLab | 1 day ago | 0.48 KB
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the
Cookies Policy
.
OK, I Understand
Not a member of Pastebin yet?
Sign Up
, it unlocks many cool features!