C'est Quoi Un Point D'accès ?!

Réseau informatique

Un Point d'accès réseau ou PA (ou AP pour Access Point en anglais), dans le domaine des réseaux de télécommunications, est un endroit équipé d'une structure ad-hoc permettant de se connecter matériellement à un réseau filaire ou radio, en suivant une procédure logicielle à l'aide d'un terminal.

Utilité

La notion de pointeur reflète l'utilisation différente que l'on peut faire d'un nombre entier, à savoir indiquer une adresse mémoire. Cette utilisation est très différente d'une utilisation arithmétique, d'où la création de registres processeurs spécifiques (les registres d'adresse) et d'un type de donnée spécifique dans les langages de programmations.
Les pointeurs « typés », le type le plus répandu de pointeur actuellement, sont apparus avec le langage C, qui a ajouté un typage sur les données pointées par le pointeur. Quand on incrémente un tel pointeur, il n'est en fait pas forcément incrémenté de un, mais de la taille du type pointé.
L'utilisation des pointeurs permet d'avoir accès à la couche basse de l'ordinateur, un accès direct à la mémoire. On peut littéralement se déplacer de case mémoire en case mémoire. Cette technique permet d'effectuer des optimisations sur l'utilisation de la mémoire ou la performance en termes de vitesse.
Les pointeurs sont entre autres utilisés pour stocker les adresses des zones mémoires allouées dynamiquement par l'application. Si on alloue un bloc de taille T et qu'on reçoit l'adresse A en retour, cela veut dire que le bloc occupe la mémoire à partir de l'adresse A jusqu'à l'adresse A+T-1.
Dans les langages de plus haut niveau, l'utilisation des pointeurs est supprimée, au profit des références et des tableaux dynamiques gérés par le compilateur. Les références remplissent certaines fonctions des pointeurs en supprimant l'accès à la mémoire. Cela évite beaucoup de problèmes, en contrepartie certaines utilisations et optimisations ne sont plus possibles.

Complexification

L'utilisation des pointeurs est très puissante dans certains langages. Cette puissance (et surtout le fait que l'on touche directement à la mémoire sans aucun contrôle) complexifie le développement d'une application.
Si l'on ne fait pas attention et que l'on accède à une zone mémoire qui ne nous est pas allouée, le processeur via le système d'exploitationgénèrera une erreur de segmentation qui provoquera une exception voire fera planter l'application. De plus, comme les allocations mémoire sont réalisées en partie par le développeur, il doit également se charger de la libération de la mémoire lorsqu'il n'en a plus besoin, au risque de voir une fuite mémoire apparaître.
Tous ces inconvénients obligent le développeur à prendre en charge des choses supplémentaires, compliquant ainsi l'application et pouvant ajouter des bugs.
Pour toutes ces raisons, les pointeurs sont regardés avec une certaine méfiance. 01 Informatique les a qualifiés d'« aussi puissants qu'ils sont dangereux »1, en expliquant les atouts du langage D. En effet, au vu des avantages et inconvénients des pointeurs, ce langage a été conçu pour en autoriser l'usage aux programmeurs appréciant leur efficacité, tout en fournissant constamment des solutions alternatives à ceux qui s'en méfient.

Langages sans pointeurs

Certain langages ne permettent pas l'utilisation explicite de pointeurs. La majorité des langages de programmation utilisent (ou au moins permettent) le passage de paramètres par valeur. Typiquement, si n est un entier, alors l'appel de fonction f(n) ne pourra pas modifier n même si dans le code de la fonction, l'argument est incrémenté. La raison est que la valeur de la variable n est d'abord copiée, si bien que la fonction f peut lire et écrire cette copie de la variable n, mais ne peut pas modifier la variable n originale.
Avec les pointeurs, il devient possible de passer en argument d'une fonction l'adresse d'une variable, et ainsi d'accéder en lecture et en écriture à la variable originale, et ce dans le code de la fonction.
Dans la plupart des langages de programmation sans pointeurs, par exemple PythonJava ou Javascript/Actionscript, les variables ou objets sont toujours passés par valeur, mais l'accès aux champs de ces objets se fait par référence ou par adresse. Typiquement, si o est un objet, alors f(o) ne pourra modifier o, mais pourra modifier (s'il existent) les champs de o, par exemple s'il existe le champ o.taille de l'objet o original pourra être incrémenté dans le code de la fonction. Ainsi, en passant par référence / adresse les champs des objets, c'est-à-dire en modélisant un objet comme étant une liste de références / pointeurs sur ses champs, il devient possible d'implémenter toutes les structures de données qui nécessitent des pointeurs tels que les arbres, les listes chaînées, etc... Pour ce qui est des tableaux, tout fonctionne comme si les tableaux étaient des objets possédant un opérateur [], l'écriture tab[i] donnant accès au champ i de l'objet tab. Dans une fonction prenant en argument un tableau, il est donc (uniquement) possible de modifier les éléments du tableau.
Mais certains langages fonctionnent différemment. En PHP, les variables ou objets peuvent être au choix passés par valeur/copie ou par référence/adresse, en utilisant au choix la syntaxe f(&$n) au lieu de f($n).

Langages utilisant les pointeurs

Les pointeurs sont, entre autres, utilisés par les langages suivants (liste non exhaustive) : CC++PascalAdaFreeBASICFortranC#DModula-2Oberon et, bien sûr, tous les assembleurs.

Pointeurs en Assembleur

Ce langage ne connait en fait que deux notions pour stocker des données : les registres (assimilables à des variables globales), et les adresses mémoire (qui sont très précisément des pointeurs). Le langage est tellement proche de la machine qu'il est quasiment impossible de se passer de la notion de pointeur.

Pointeurs en C et C++

Les deux principaux langages utilisant énormément les pointeurs sont le C et le C++. Dans ces langages, un pointeur est déclaré avec une étoile '*' préfixée à la variable déclarée. On récupère l'adresse d'une variable avec une esperluette '&'.
L'étoile, en tant qu'opérateur unaire préfixé, sert également à déréférencer un pointeur, autrement dit à avoir accès au contenu « pointé » par ledit pointeur.
Voici un petit exemple :
int a = 2;    // Déclaration de a, de type int, initialisé avec la valeur 2.
int *p = &a;  // Déclaration de p, de type pointeur de int, initialisé avec l'adresse de a.
*p = 5;       // Déréférencement de p, pour affecter 5 à la variable a, maintenant a vaut 5.

Pointeurs en COBOL

Les diverses implémentations du langage comportent la notion de pointeur en COBOL. Bien que rarement employé, il n'en demeure pas moins un outil d'interface avec des programmes écrits en C ou en assembleur.
Un pointeur constitue en COBOL une variable déclarée en DATA DIVISION :
     05  POINTEUR-1       USAGE IS POINTER.
     05  POINTEUR-NUL     USAGE IS POINTER VALUE NULL.
Il est ensuite utilisé en PROCEDURE DIVISION.
Le pointeur stocke l'adresse mémoire d'une donnée ou d'une structure de données. Le mot réservé SET permet de l'initialiser. Il est possible de procéder à des comparaisons.
 DATA DIVISION.
     05  POINTEUR-1            USAGE IS POINTER.
     05  POINTEUR-DEBRANCH1    USAGE IS POINTER.
*
 PROCEDURE DIVISION.
*
     ADD COEFF-1 TO MONTANT GIVING TOTAL.
     SET ADDRESS OF TOTAL  TO POINTEUR-1.
     PERFORM UNTIL POINTEUR-1 = POINTEUR-DEBRANCH1
        ADD 1 TO NBRLUS
     END-PERFORM.
*
Il est également possible de passer en paramètre le pointeur vers un autre programme.
     CALL "CALCUL-TVA" USING POINTEUR-1.

Pointeurs en Pascal

La syntaxe en Pascal est très similaire à celle en C et C++, à l'exception notable que le symbole de déréférencement est inversé par rapport au C et C++. Les pointeurs typés sont déclarés avec un chapeau '^' préposé au type pointé. On récupère l'adresse d'une variable avec une arrobase '@'.
Le chapeau sert également à déréférencer l'adresse d'un pointeur, mais alors il est postposé. L'exemple ci-dessus s'écrit donc en Pascal ainsi :
var a: integer;    { Déclaration de la variable a de type integer (entier) }
    p: ^integer;   { Déclaration de la variable p de type pointeur sur entier }
 
begin
    a := 2;        { Iinitialisation de a à 2 }
    p := @a;       { Adresse de a affectée au pointeur p }
    p^ := 5;       { Déréférencement de p, pour affecter 5 à la variable a }
end;
Certains types de pointeurs peuvent être prédéfinis dans certaines implémentations du Pascal, comme Delphi :
type
    pchar = ^char;
    pinteger = ^integer;

Arithmétique des pointeurs

On appelle arithmétique des pointeurs la possibilité de faire des opérations arithmétiques (incrémentation, décrémentation, addition et soustraction) sur les pointeurs. Cela revient à effectuer un déplacement en mémoire.
La particularité de cette utilisation des pointeurs, est que l'on se déplace par saut de la taille mémoire du type de donnée pointé par le pointeur et non par octet (qui est la plus petite unité accessible).

Exemple en C

char tab[] = {'t', 'a', 'b', '\0'};
char * p1 = &tab[0];
Ici le pointeur p1, contient l'adresse du premier élément du tableau tab (ce qui est équivalent à p1 = tab). Si l'on déréférence p1, nous aurions donc le caractère 't'.
p1 = p1 + 1;
En faisant cela, p1 ne pointe plus sur le caractère 't', mais sur 'a'. Dans cet exemple, le déplacement en mémoire a été de un byte (car le type char vaut toujours un byte). Mais si le tableau avait contenu des données de type long, le déplacement aurait pu être de plusieurs bytes. Le déplacement se fait donc par saut de la taille mémoire du type de donnée pointé par le pointeur.

Exemple en Pascal

Encore une fois, la syntaxe en Pascal est très proche.
const { les deux définitions sont équivalentes }
    tab: array[0..3] of char = ('T', 'A', 'B', #0);
var
    p1: ^char;
 
begin
    p1 := @tab[0];  { p1 pointe sur le 'T' }
    inc(p1);        { p1 pointe sur le 'A' }
end.
Une différence importante pourtant reste, c'est qu'on ne peut que incrémenter et décrémenter un pointeur typé. Pour faire une addition proprement dite, il faut convertir en entier d'abord :
begin
    p1 := @tab[0];                 { p1 pointe sur le 'T' }
    p1 := ptr( integer(p1) + 2 );  { p1 pointe sur le 'B' }
end.
Dans ce cas-là, il faut prendre soi-même en charge la multiplication éventuelle par la taille du type des données pointées.

Pointeur sur une fonction

Les pointeurs peuvent également contenir l'adresse d'une fonction. Cette dernière peut ainsi être passée en paramètre à une autre fonction et être appelée.

Exemple en C

Voici un exemple en C, de la déclaration d'un pointeur qui pointe successivement vers les fonctions fonction_1() et fonction_2() :
#include<stdio.h>
 
void fonction_1() {
  printf("affiche fonction_1");
}
 
void fonction_2() {
   printf("affiche fonction_2");
}
 
int main() {
   void (*fonction)();
   fonction = fonction_1;
   fonction();
   fonction = fonction_2;
   fonction();
   return 0;
}
Ce code va produire la sortie suivante : affiche fonction_1affiche fonction_2

Même exemple en Pascal

procedure fonction_1;
begin
      writeln('affiche fonction_1');
end;
 
procedure fonction_2;
begin
      writeln('affiche fonction_2');
end;
 
var
    fonc : procedure;
 
begin  { bloc principal }
      @fonc := @fonction_1;
      fonc;
      @fonc := @fonction_2;
      fonc;
end.

C'est Quoi Un Hacker ?!


    Un Hacker ou Hackeur est une personne qui montre une passion pour la compréhension du fonctionnement intime des systèmes, ordinateurs et réseaux informatiques en particulier1.
En sécurité informatique, un hacker est un spécialiste dans la maîtrise de la sécurité informatique et donc des moyens de déjouer cette sécurité. Certains d'entre eux utilisent ce savoir-faire dans un cadre légal et d'autres l'utilisent hors-la-loi. Dans ce dernier cas, on parle de pirates informatiques2.
Hacker, dans sa signification relayée par les médias de masse, se réfère aux chapeaux noirs (pirate informatique). Afin de lever l'ambiguïté sur le terme hackercracker est souvent utilisé pour désigner les black hats, le démarquant ainsi de la culture académique des hackers telle que définie par Eric Raymond3.
Le jargon informatique classe les hackers en plusieurs catégories en fonction de leurs objectifs, de leur compétence et de la légalité de leurs actes. Ce vocabulaire fait référence aux films de western, où le héros porte un chapeau blanc, et les méchants portent des chapeaux noirs. Par respect nous utiliserons le terme cracker et non hacker pour désigner ces personnes.
  • Les chapeaux blancs ou white hat : professionnels de la sécurité informatique (consultants en sécurité, administrateurs réseaux...) effectuant des tests d'intrusions en accord avec leurs clients et la législation en vigueur afin de qualifier le niveau de sécurité de systèmes. Certains hackers se considèrent comme white hat alors qu'ils transgressent les lois, leur but étant de prévenir les responsables des failles de leurs systèmes. Certains d'entre eux s'infiltrent dans les systèmes de sécurités les plus coriaces juste pour la connaissance, pour se dire qu'ils savent le faire.
  • Les chapeaux bleus ou blue hat : consultants en sécurité informatique chargés de vérifier l'absence de bogues et de corriger d'éventuels exploits avant le lancement d'unsystème d'exploitation sur le marché. Le terme est notamment employé par Microsoft, désignant ses hackers et ingénieurs en sécurité informatique qui ont pour rôle de trouver les vulnérabilités de Windows.
  • Les chapeaux noirs ou black hat : créateurs de virus, cyber-espions, cyber-terroristes ou cyber-escrocs, agissant la plupart du temps hors-la-loi dans le but soit de nuire, de faire du profit ou d'obtenir des informations. Ces hackers n'ont pas la même éthique que les White hats et sont souvent malveillants. Les plus malveillants sont alors appeléscrashers.
  • Les chapeaux gris ou grey hat : s'ils n'hésitent pas à pénétrer dans les systèmes sans y être autorisés, ils n'ont pas de mauvaises intentions. C'est souvent l'« exploit informatique » qui les motive, une façon de faire la preuve de leur agilité. Cette catégorie recouvre le large panel de personnes se situant entre le black hat et le white hat. Cela dit, le fait de ne pas obtenir d'autorisation préalable rend l'acte illégal.
  • Les script kiddies ou lamer, littéralement « gamins qui utilisent des scripts » : sans grande compétence, ceux-ci piratent surtout par désir de se faire remarquer, en utilisant des programmes codés par d'autres. Ces personnes ne sont pas à proprement parler des hackers, mais elles se considèrent généralement comme tels.
  • Les hacktivistes : agissant afin de défendre une cause, ils n'hésitent pas à transgresser la loi pour attaquer des organisations afin de les paralyser ou d'obtenir des informations.
Il serait réducteur de généraliser le cas et d'en déduire que les white hats sont les gentils et les black hats sont les méchants. En effet, de nombreux débats se font entre les deux camps et aucun camp n'a réussi à prouver que le sien était la voie à suivre. De nombreux white hats ne servent que leurs intérêts alors que d'autres black hats protègent ceux des autres. C'est d'ailleurs un sujet de troll récurrent.

Méthodologie globale

Les hackers ayant l'intention de s'introduire dans les systèmes informatiques recherchent dans un premier temps des failles, c'est-à-dire des vulnérabilitésnuisibles à la sécurité du système, dans les protocoles, les systèmes d'exploitations, les applications ou même le personnel d'une organisation ! Les termes de vulnérabilité, de brèche ou en langage plus familier de trou de sécurité (en anglais security hole) sont également utilisés pour désigner les failles de sécurité. 
Pour pouvoir mettre en oeuvre un exploit (il s'agit du terme technique signifiantexploiter une vulnérabilité), la première étape du hacker consiste à récupérer le maximum d'informations sur l'architecture du réseau et sur les systèmes d'exploitations et applications fonctionnant sur celui-ci. La plupart des attaques sont l'oeuvre de script kiddies essayant bêtement des exploits trouvés sur internet, sans aucune connaissance du système, ni des risques liés à leur acte. 
Une fois que le hacker a établi une cartographie du système, il est en mesure de mettre en application des exploits relatifs aux versions des applications qu'il a recensées. Un premier accès à une machine lui permettra d'étendre son action afin de récupérer d'autres informations, et éventuellement d'étendre ses privilèges sur la machine. 
Lorsqu'un accès administrateur (le terme anglais root est généralement utilisé) est obtenu, on parle alors de compromission de la machine (ou plus exactement en anglais root compromise), car les fichiers systèmes sont susceptibles d'avoir été modifiés. Le hacker possède alors le plus haut niveau de droit sur la machine. 
S'il s'agit d'un pirate, la dernière étape consiste à effacer ses traces, afin d'éviter tout soupçon de la part de l'administrateur du réseau compromis et de telle manière à pouvoir garder le plus longtemps possible le contrôle des machines compromises. 
Le schéma suivant récapitule la méthodologie complète : 
Méthodologie d\

La récupération d'informations sur le système

L'obtention d'informations sur l'adressage du réseau visé, généralement qualifiée de prise d'empreinte, est un préalable à toute attaque. Elle consiste à rassembler le maximum d'informations concernant les infrastructures de communication du réseau cible :
  • Adressage IP,
  • Noms de domaine,
  • Protocoles de réseau,
  • Services activés,
  • Architecture des serveurs,

Cinq conseil pour se protéger contre le Hackage

1Choisir des mots de passe compliqués et les changer régulièrement


"La grande majorité des gens utilisent le même mot de passe pour tous leurs comptes et adresses e-mail. C'est une grave erreur", alerte Hugo. Une fois qu'un mot de passe est intercepté, il y a de grandes chances que le pirate tente d'utiliser le code sur les autres applications de l'appareil.
"Préférez des mots de passe complexe avec des majuscules, des minuscules et des chiffres", conseille l'ancien hacker. Pourquoi ? "Les logiciels de décryptage ne prennent pas forcément en compte toutes ces variables." Il existe aussi des "attaques par dictionnaire", qui consistent à tester à grande vitesse, via un logiciel spécialisé, tous les mots des dictionnaires en espérant qu'un des mots soit utilisé comme mot de passe. Les codes d'accès type "maison" ou "chocolat" ne tromperont donc pas grand monde.
Enfin, pensez à changer régulièrement vos codes d'accès. "Tous les trois mois, c'est déjà très bien." En cas d'oubli de mots de passe, n'oubliez pas de supprimer dans votre boîte les courriels qui vous redonnent le précieux code secret.

2Bien choisir son pare-feu et son antivirus

Hugo insiste sur ce qu'il qualifie comme l'un des "grands commandements du hacker" : "Aucun système n'est imprenable." Un pirate informatique, compétent qui plus est, pourra de toute façon entrer dans votre ordinateur s'il le souhaite. "C'est juste une question de temps. L'idée est donc de lui rendre la tâche la plus longue et la plus difficile possible."
Pour ça, Hugo conseille de bien choisir son antivirus et son pare-feu. En informatique, le pare-feu est une sorte de filtre qui permet de bloquer certaines connexions entrantes et sortantes. Pour entrer dans un ordinateur, un pirate informatique utilise une faille dans le pare-feu. "Votre ordinateur est comme une maison avec de nombreux portails. Une faille n'est rien d'autre qu'un portail resté malencontreusement ouvert." Les failles sont normalement corrigées par les mises à jour du système d'exploitation. C'est pourquoi il ne faut pas rechigner les mises à jour, même si elles prennent parfois beaucoup de temps.
Si un virus se fraie malgré tout un chemin vers votre ordinateur, un bon antivirus peut l'empêcher de nuire. "Mieux vaut acheter un antivirus, parce que les logiciels payants restent malheureusement bien plus performants que les gratuits." Là encore, le principal reste de faire les mises à jour.

3Installer une clé WPA 2 sur son réseau wifi

Il existe plusieurs types de clés wifi. La clé WEP est la plus courante, parce qu'elle reste habituellement le choix par défaut sur la plupart des équipements. Mais c'est aussi la moins sécurisée. "Une clé WEP peut se 'craquer' [être décryptée] en 3 à 5 minutes" contre "entre 11 et 16 heures pour une WPA 2". 
"Là encore, tout est question de temps", explique Hugo. Le WPA 2, conçu pour pallier aux défauts de ses aïeuls, les clés WEP et WPA, est le type de cryptage grand public le plus protecteur à l'heure actuelle.
Pour l'activer, il suffit d'ouvrir son navigateur web – type Internet Explorer ou Google Chrome – et de taper "192.168.1.1" dans la barre d'adresse. Vous accédez alors à l'interface de gestion wifi, où vous pourrez changer directement la clé WEP en WPA 2 Personnel (ou WPA 2 PSK). Pour cela, il est aussi possible de passer par votre page "compte" sur le site de votre fournisseur d'accès à internet.

4Eteindre sa connexion wifi le soir

"Le soir, quand vous avez fini d'utiliser votre ordinateur, éteindre votre box peut éviter les intrusions sur votre réseau." Même si l'ordinateur est éteint, la connexion internet reste vulnérable. Equipé d'une petite antenne, Hugo scannait les réseaux environnants pour chercher les failles à exploiter.
"Une fois connecté au réseau, il suffit ensuite de remonter la passerelle qui relie la box à l'ordinateur pour rentrer dans l'appareil. Mais si la box est éteinte, c'est impossible." Certains modems font cependant des mises à jour la nuit et nécessitent donc de rester allumés. Dans ce cas, il suffit de couper le wifi uniquement. Pour cela, certaines box disposent d'un petit bouton on/off en façade. Sinon, il faudra passer à nouveau par l'interface de gestion wifi, via l'adresse IP "192.168.1.1".

5Scotcher un petit morceau de papier sur sa webcam

Si votre ordinateur est finalement piraté malgré toutes ces précautions, un simple petit morceau de papier placé devant votre webcam empêchera au moins qu'on vous observe à votre insu, comme ont pu le faire des journalistes de Rue89"Un soir, je me suis rendu compte que ma webcam était allumée. Un de mes amis était en train de m'observer, raconte Hugo. Depuis, j'ai toujours un petit bout de scotch sur ma webcam."