Il me semble que beaucoup de gars, surtout à un jeune âge, voulaient être des hackers sympas. Hacker des sites, des téléphones, des systèmes d'accès. J'ai donc un peu de cet enthousiasme enfantin. Par conséquent, fouillant périodiquement dans divers logiciels et n'a rien trouvé de valable. Mais un jour, la chance s'est présentée pour moi, et même quoi! ACS, plein de vulnérabilités qui permettent d'accéder à la gestion de l'ensemble du système (ouverture / fermeture des portes, ajout de votre carte d'accès, etc.).
Intéressant? Alors bienvenue à Kat!
Tout ce qui est décrit ci-dessous a été réalisé sur un banc d'essai. L'article a été écrit uniquement à des fins éducatives et en général, tout cela est une invention de l'auteur.
SKUD - système de contrôle et de gestion d'accès
Il s'est avéré qu'à un moment donné, j'ai travaillé dans une entreprise de construction et de voirie, où j'ai écrit un ensemble de programmes pour délivrer des laissez-passer, délivrer de la nourriture pour ces laissez-passer et faire des rapports. J'avais besoin d'intégrer tout cela avec un ACS assez populaire. Les développeurs ont répondu aux demandes de documentation pendant longtemps et les délais ont été brûlés. J'ai dû comprendre moi-même leur logiciel.

Schéma de fonctionnement approximatif de l'ACS
J'ai commencé à apprendre de la base de données. Le serveur ACS fonctionne avec la base de données Firebird 2.5. Le nom d'utilisateur et le mot de passe se sont avérés être standard, ce qui est déjà très alarmant, mais le mot de passe peut être défini dans les paramètres du programme. Les mots de passe dans la base de données vers les comptes sont hachés, mais sans sel, ce qui est mauvais, mais là encore non critique. Il stocke toutes les zones de passage, les utilisateurs, leurs numéros de carte, les accès et les adresses des contrôleurs.

Db
Ensuite, nous prenons un programme pour renifler le trafic (j'ai pris "SmatrSniff", le premier qui peut regarder le trafic localhost) et voir ce que le client envoie au serveur. Toutes les données passent par TCP et certaines par UDP sous forme non chiffrée. Et ici, le plaisir commence. Le serveur envoie d'abord le mot de passe clair de la base de données, son emplacement, et ensuite seulement vérifie le nom d'utilisateur et le mot de passe!

Mot de passe de la base de données masterkey
Il s'avère que, sans connaître le nom d'utilisateur et le mot de passe, nous pouvons avoir un accès complet à la base de données, ce qui nous donne des possibilités presque illimitées. Nous pouvons nous donner une carte avec accès à n'importe quel objet. Prescrivez votre carte à un autre utilisateur et passez sous son nom. Mais pour que ces données soient téléchargées sur les contrôleurs, vous devez donner une commande au serveur à partir du client. Bien que nous puissions apporter le mot de passe au client à partir de la base de données, utilisez les bases de données MD5 ouvertes et essayez de trouver le mot de passe pour le hachage (je vous rappelle que les mots de passe dans la base de données sont sans sel), mais si le mot de passe est compliqué, alors très probablement rien ne fonctionnera. Nous devrons attendre que quelqu'un clique sur le bouton de téléchargement complet.
Puis j'ai regardé, et l'autorisation affecte-t-elle quoi que ce soit. Pour ce faire, j'ai essayé de répéter les requêtes au serveur en utilisant «TCP / IP Builder». Et oui, les requêtes ultérieures au serveur ne fonctionnent pas sans autorisation (envoie un refus en réponse). Ici, je suis un peu déprimé, car pour l'intégration, je devrai implémenter une répétition de toute la chaîne d'autorisation et ensuite envoyer un package pour charger les données dans le contrôleur.
Enfin, j'ai décidé de répéter la demande de transfert de la porte en mode ouvert. Le serveur a répondu «ok» et la porte bipait. Sans aucune autorisation. J'ai répété la même chose à partir d'un autre ordinateur sur le réseau local et cela a fonctionné aussi.

Type approximatif de colis
Cela signifie que nous pouvons ouvrir / fermer n'importe quelle porte depuis n'importe quel ordinateur du réseau local. Prescrivez-vous une carte et téléchargez immédiatement ces données sur les contrôleurs. Parcourez ensuite calmement les objets et supprimez tous les journaux de notre visite.
J'ai tué quelques heures pour apprendre le protocole de communication entre le contrôleur et le serveur afin de finalement le casser, mais je ne comprenais pas complètement le format des données. Mais je suis sûr qu'il n'y a pas de protection. Les packages ont définitivement les adresses mac du contrôleur et du serveur / passerelle (la liaison au serveur va à l'adresse mac, il n'y a pas de clés de chiffrement et autres dans la base de données, vous pouvez donc très probablement prétendre être le serveur du contrôleur connaissant le serveur mac). Malheureusement, il n'y a pas de décharges ni d'accès à l'équipement, donc je ne peux pas le montrer.
En conséquence, nous avons des vulnérabilités de contrôle d'accès complet, qui nous donnent un accès illimité aux passages aux objets. En raison du faible coût des composants et des logiciels gratuits, cet ACS est très courant. Elle se tient dans de nombreuses écoles à Moscou et je l'ai vue sur d'autres sites. L'entreprise est fière de prix lors de divers événements. Je ne nomme pas spécifiquement l'organisation et je ne leur ai pas écrit à ce sujet. Parce que je crois que de telles vulnérabilités au niveau de l'architecture ne peuvent pas être corrigées sans réécrire tous les logiciels à partir de zéro et mettre à jour tout l'équipement des personnes qui ont acheté ce système (il y a plusieurs trous plus graves au niveau de l'architecture, mais leur description aurait triplé l'article). Pour ceux qui ont appris de l'écran ACS et qu'il est installé en vous, je vous conseille d'isoler complètement le réseau (qui est considéré comme les «meilleures pratiques»), dans lequel se trouvent tous les composants du système, et l'accès à la base de données pour ajouter des employés se fait uniquement via un VPN. Une configuration de routage appropriée peut également aider.