Accueil Blog Acumatica Hackathon 2022 : Disséquer un Centurion - Partie I

Acumatica Hackathon 2022 : Disséquer un Centurion - Partie I

Dans cet article en deux parties, Brian Stevens et Gerhart van den Heever discutent du projet gagnant du hackathon de l'équipe Theta - Acumatica Centurion. Le projet Centurion se prémunit contre les fichiers malveillants et peu recommandables et tire la sonnette d'alarme lorsque quelqu'un tente de télécharger des fichiers suspects vers Acumatica. Qu'ils proviennent d'écrans standards, de services web tiers ou de l'application Acumatica Mobile, Acumatica Centurion ne baisse jamais sa garde.
Brian Stevens | 14 février 2022

Acumatica Hackathon 2022 : Disséquer un Centurion - Partie I

Introduction

L'Acumatica Hackathon annuel est l'événement le plus important pour les développeurs les plus passionnés de la communauté Acumatica. Apprécié pour ses compétitions stimulantes, ses opportunités de réseautage et ses expériences d'apprentissage intenses, les développeurs et les non-développeurs du monde entier se sont rendus au Wynn Las Vegas pour y participer. Comme prévu, l'événement a offert tous les défis, le plaisir et les opportunités d'apprentissage dans un paquet serré de 24 heures.

Suite à l'intérêt manifesté par la communauté, Gerhard van den Heever de l'équipe Theta et moi-même allons partager une partie du fonctionnement interne d'Acumatica Centurion qui a contribué à faire de ce projet le projet gagnant de l'Acumatica Hackathon 2022. Dans ce billet, je partagerai la façon dont Centurion intercepte les téléchargements de fichiers et quelques détails sur l'API Cloudmersive utilisée pour l'analyse des pièces jointes par l'IA. Dans un article suivant, Gerhard expliquera comment l'application client des services web permet de télécharger en masse des fichiers à partir d'un dossier sur le PC local.

Depuis l'avènement de l'ordinateur personnel, des fichiers peu recommandables se sont retrouvés sur les panneaux d'affichage à accès commuté, sur les sites Internet modernes et même dans les systèmes des entreprises. Qu'ils contiennent des virus ou des images choquantes, les entreprises se sont battues pendant des décennies pour établir des politiques et des protocoles visant à limiter la prolifération et la responsabilité des "mauvais fichiers" sur leurs systèmes. Dans le monde post-pandémique où de nombreux employés de bureau traditionnels ont quitté le bureau et travaillent désormais dans le coin d'une chambre ou d'un salon, la crainte d'être pris diminue car les actions des travailleurs sont cachées derrière les murs de leur maison. Même dans les journaux, un projet de loi contre le cryptage a récemment été adopté par la commission judiciaire du Sénat, menaçant de tenir les entreprises pour responsables des fichiers téléchargés sur leurs serveurs. Pour en savoir plus, cliquez ici.

Comment les clients d'Acumatica peuvent-ils se protéger contre tous ces risques ? L'équipe Theta a répondu à l'appel en créant l'Acumatica Centurion pour aider les entreprises à se protéger.

Acumatica Centurion est un projet qui intercepte les téléchargements de fichiers et exploite l'IA de Cloudmersive via des appels API pour sonder le contenu des fichiers et effectuer certaines actions administratives. Bien que l'équipe Theta ait sélectionné des analyses d'images NSFW (Not Safe For Work), des analyses de virus et le redimensionnement d'images, les actions mises en œuvre ne sont qu'une petite représentation des nombreux outils qui peuvent être appliqués. Lorsqu'un téléchargement d'image échoue à la vérification NSFW, une notification est générée pour susciter une réponse réelle à une condition détectée par l'IA.

Acumatica Centurion est disponible sur GitHub dans la branche 2021R2 de : AcumaticaHackathon/2022-Team-Theta (github.com)

Bien que tous les composants ne soient pas expliqués ici, la personnalisation d'Acumatica contient :

  • Écran de configuration pour contenir la clé API de Cloudmersive
  • Écran de saisie de données pour les enregistrements de remplacement pour les pièces jointes de chargement en vrac
  • Extension graphique UploadFileMaint pour intercepter les téléchargements de fichiers avant de les persister dans la base de données
  • Méthodes d'appel de l'API Cloudmersive pour faciliter l'analyse des fichiers
  • IG, événement commercial et modèle de notification pour notifier l'apparition de conditions contrôlées
  • Différents DAC sous-jacents, graphiques et méthodes
  • Paquets NuGet Cloudmersive Image Recognition et Virus Scan (Un compte Cloudmersive gratuit est nécessaire pour obtenir une clé gratuite à usage limité).

Le poste de garde

Le Centurion Acumatica monte la garde dans une extension de graphe sur le graphe UploadFileMaintenace. En remplaçant Persist, nous pouvons analyser la pièce jointe, la modifier si nécessaire et mettre à jour l'enregistrement de la pièce jointe avec un commentaire reflétant les résultats de l'analyse et/ou de la modification. Bien que cela ne soit pas écrit comme tel dans le code, un échec de l'analyse antivirus ou une classification renvoyée de NSFW (Not Safe for Work) pourrait être utilisé pour détourner la pièce jointe ailleurs ou sauter l'exécution de la base Persist. Étant donné que cette opération s'exécute dans une LongOperation, vous ne pouvez pas simplement lancer une PXException pour renvoyer un message à l'écran. Cependant, le fait de lancer une exception entraîne la perte de la pièce jointe, qui n'est pas enregistrée dans la base de données .

L'examen du code fait ressortir quelques points essentiels :

  • Ligne 16 - Créer une vue de configuration pour accéder à la clé API Cloudmersive stockée dans l'écran TT Preferences.
  • Ligne 31 - Obtenir l'enregistrement TTSetup et extraire la clé API.
  • Ligne 35 - Parcourir tous les enregistrements mis en cache dans la vue Fichiers.
  • Ligne 39 - Extraction du fichier joint dans un tableau binaire.
  • Lignes 46, 50 et 64 - Définir le champ de commentaire en fonction des résultats de l'analyse.
  • Lignes 45 et 49 - Utilisation de l'API pour classer une image et renvoyer une description de l'image.
  • Ligne 55 - Utiliser l'API pour modifier la taille de l'image.
  • Ligne 61 - Utiliser l'API pour rechercher des virus dans le fichier.
  • Ligne 75 - Invocation de la méthode Persist originale via le délégué.

Vous trouverez ci-dessous l'extrait de code décrit ci-dessus :

GIST: https://gist.github.com/BrianMRO/682d869ef0baa357509e6d88b3ab0528

Passer l'appel

Cloudmersive fournit une large bibliothèque d'API intéressantes. L'équipe Theta a choisi Cloudmersive pour le composant NSFW du paquetage de reconnaissance d'image qui peut être installé via NuGet. Alors qu'à l'origine, nous nous attendions à ce que Gerhard dirige le développement des appels aux services web, il a découvert dans la documentation que des échantillons de code.Net Framework étaient fournis et qu'ils ne nécessitaient que votre propre clé API de votre compte pour fonctionner. C'est donc à moi (Brian) qu'a été confié le développement. Conscients que notre temps de présentation serait limité, nous avons sélectionné quatre appels d'API dans deux paquets NuGet. Bien que les API externes jouent un rôle important dans les Hackathons depuis des années, les appels d'API n'étaient pas destinés à être notre point central. Au contraire, ils devaient simplement ajouter de la profondeur au projet en exécutant des actions une fois que nous aurions intercepté les pièces jointes. Il s'agit bien sûr d'une démo bien plus intéressante pour démontrer un ensemble de règles pour l'analyse de l'IA. La classification des images en vue d'évaluer la présence de NSFW nous a fourni un cas plausible de notification à un administrateur pour qu'il prenne des mesures, ce qui, une fois de plus, a ajouté de la profondeur à la présentation.

Bien que le code soit assez facile à lire avec les commentaires qui vous guident à travers les points principaux, nous avons apporté quelques changements importants aux exemples de code fournis par Cloudmersive. Tout d'abord, nous avons fait de ces méthodes des méthodes statiques publiques pour simplifier leur appel. Nous avons également ajouté des paramètres pour la clé API et le tableau d'octets contenant les données, car les exemples créaient des flux à partir d'un fichier local. Au lieu de cela, nous avons dû traiter le tableau d'octets et le convertir en System.IO.MemoryStream. En outre, nous avons renvoyé soit une chaîne de caractères pour la modification des commentaires, soit un bool pour indiquer le succès, soit un tableau d'octets si nous avons modifié la pièce jointe. Enfin, nous sommes passés d'une sortie via Debug à l'utilisation des messages PXTrace standard d'Acumatica.

Voici l'extrait de code :

GIST : https://gist.github.com/BrianMRO/7f1ce5d8717deb342e87a23b96251ffa

Tirer la sonnette d'alarme

Comme aucun centurion ne serait digne de ce nom sans tirer la sonnette d'alarme en cas d'attaque, Christina a créé une notification destinée à l'administrateur lorsque l'IA de Cloudmersive détecte une image classée NSFW(sans danger pour Acumatica). (Pour nous amuser un peu, nous avons remplacé ce terme par Not Safe for Acumatica, ou NSFA). Lorsqu'une image était classée NSFA ou "racy", nous préfixions la valeur du champ UploadFile.Comment par [NSFA] ou [Racy] respectivement. Christina a mis en place une enquête générique (IG) pour signaler tous les enregistrements UploadFileRevision dont le commentaire commence par[NSFA]. UploadFileRevision a été utilisé parce que UploadFile.Comment était vide via l'IG et que nous avons trouvé les données dans UploadFileRevision de manière cohérente. Après avoir créé un modèle de notification et un événement métier lors de la création d'un enregistrement surveillé par l'IG, l'administrateur peut être notifié et envoyé pour enquêter.

Disséquer un centurion - Partie 2

Dans la partie 2, Gerhard nous donne un aperçu du bulk uploader utilisé dans la démo pour tester les téléchargements de fichiers des services web en récupérant tous les fichiers d'un dossier et en les poussant dans Acumatica. Vous pouvez lire la partie 2 ici.

D'ici là, bon codage !

 


 

Auteur du blog

Brian est le développeur principal de SETECH Supply Chain Solutions, LLC. SETECH fournit des solutions sur mesure basées sur les meilleures pratiques afin d'améliorer la disponibilité des matériaux indirects tout en réduisant le coût total de possession pour leurs clients.

Recevez les mises à jour du blog dans votre boîte de réception.

a