Accueil Blog (en) Acumatica Hackathon 2022: Disséquer un centurion - Partie I

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

Dans ce post en deux parties, Brian Stevens & Gerhart van den Heever discuter du projet de hackathon gagnant de l’équipe Theta - Acumatica Centurion. Le projet Centurion se protège contre les fichiers malveillants et peu recommandables et déclenche une alarme lorsque quelqu’un tente de télécharger des fichiers suspects sur Acumatica. Qu’il s’agisse d’écrans standard, d’applications de service Web 3rd-party ou de l’application Acumatica Mobile, Acumatica Centurion ne baisse jamais la garde.
Brian Stevens | Le 14 février 2022

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

Introduction

L’Acumatica Hackathon annuel est le premier événement pour bon nombre des développeurs les plus passionnés de la communauté Acumatica. Aimés pour sa concurrence difficile, ses opportunités de réseautage et ses expériences d’apprentissage intenses, les développeurs et les non-développeurs du monde entier sont descendus sur le Wynn Las Vegas pour participer. Comme prévu, l’événement a offert tous les défis, le plaisir et les possibilités d’apprentissage dans un forfait serré de 24 heures.

Sur la base de l’intérêt reçu de la communauté, Gerhard van den Heever et moi-même de l’équipe Theta partagerons certains des rouages internes de l’Acumatica Centurion qui ont contribué à être élu le projet gagnant de l’Acumatica Hackathon 2022. Dans cet article, je vais partager comment le Centurion intercepte les téléchargements de fichiers et quelques détails sur l’API Cloudmersive utilisée pour l’analyse IA des pièces jointes. Dans un article de suivi, Gerhard expliquera comment l’application cliente de services Web permet le téléchargement en masse de fichiers à partir d’un dossier sur le PC local.

À partir de l’aube de l’ordinateur personnel, les fichiers peu recommandables ont trouvé leur chemin sur les babillards par ligne commutée, les sites Internet modernes et même dans les systèmes d’entreprise.  Qu’il s’agisse de contenir des charges utiles virales ou des images purement objectionnelles, 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 » dans leurs systèmes.  Dans le monde post-pandémique où de nombreux employés de bureau traditionnels ont quitté le bureau et travaillent maintenant du coin d’une chambre à coucher ou d’un salon, la peur d’être pris diminue à mesure que les actions des travailleurs sont cachées derrière les murs de leurs maisons.  Même d’après les gros titres, un projet de loi anti-cryptage a récemment adopté le comité judiciaire du Sénat menaçant de tenir les entreprises responsables des fichiers téléchargés sur leurs serveurs.  En savoir plus sur l’histoire ici.

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

L’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 du fichier et effectuer certaines actions administratives.  Bien que l’équipe Theta ait sélectionné les scans d’images NSFW (Not Safe For Work), les scans de virus et le redimensionnement d’image, les actions mises en œuvre sont une petite représentation des vastes 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 demander une réponse réelle à une condition détectée par AI.

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 Acumatica contient:

  • Écran de configuration pour contenir la clé API Cloudmersive
  • Écran de saisie de données pour les enregistrements d’espace réservé pour les pièces jointes de chargement en masse
  • Extension de graphique UploadFileMaint pour intercepter les téléchargements de fichiers avant de persister dans la base de données
  • Cloudmersive Méthodes d’appel d’API pour faciliter l’analyse de fichiers
  • GI, événement d’affaires et modèle de notification pour aviser des conditions surveillées qui se produisent
  • Divers DAC, graphiques et méthodes sous-jacents
  • Cloudmersive Reconnaissance d’image et analyse antivirus Forfaits NuGet (Un compte Cloudmersive gratuit est requis pour obtenir une clé d’utilisation gratuite et limitée.)

Le poste de garde

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

Lorsque vous examinez le code, quelques points focaux incluent:

  • Ligne 16 - Créez une vue d’installation pour accéder à l’accès à la clé API Cloudmersive stockée dans l’écran Préférences TT.
  • Ligne 31 – Obtenez l’enregistrement TTSetup et extrayez la clé API.
  • Ligne 35 – Parcourez tous les enregistrements mis en cache dans la vue Fichiers.
  • Ligne 39 – Extraire le fichier de pièces jointes dans un tableau binaire.
  • Lignes 46, 50 et 64 – Définissez le champ de commentaires en fonction des résultats de l’analyse.
  • Lignes 45 et 49 – Utilisez l’API pour classer une image et renvoyer une description de l’image.
  • Ligne 55 – Utilisez l’API pour modifier la taille de l’image.
  • Ligne 61 – Utilisez l’API pour analyser le fichier à la recherche de virus.
  • Ligne 75 – Invoquez la méthode Persist d’origine par l’intermédiaire du délégué.

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

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

Faire l’appel

Cloudmersive fournit une grande bibliothèque d’API intéressantes. L’équipe Theta a sélectionné Cloudmersive pour le composant NSFW du package de reconnaissance d’image qui peut être installé via NuGet. Bien qu’il s’agisse à l’origine d’un domaine dans lequel nous nous attendions à ce que Gerhard dirige le développement des appels de service Web, il a constaté dans la documentation que des exemples de code .Net Framework ont été fournis qui n’ont besoin que de votre propre clé API de votre compte pour fonctionner. Cela a déplacé le développement pour moi (Brian). Avec une conscience douloureuse que notre temps de présentation serait limité, nous avons sélectionné 4 appels API à travers 2 paquets NuGet . Alors que les API externes ont joué un grand rôle dans Hackathons pendant des années, les appels d’API n’étaient pas destinés à être notre point focal. Au lieu de cela, ils ajouteraient simplement de la profondeur au projet en effectuant des actions une fois que nous avons intercepté les pièces jointes. Cela, bien sûr, rend une démo beaucoup plus intéressante pour démontrer un ensemble de règles pour l’analyse de l’IA. La classification des images à évaluer pour NSFW nous a donné un cas plausible pour informer un administrateur de prendre des mesures, ce qui ajouterait encore une fois 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 modifications importantes aux exemples de code fournis par Cloudmersive. Tout d’abord, nous avons rendu publiques ces méthodes statiques pour simplifier leur appel. Nous avons également ajouté des paramètres pour la clé API et le tableau d’octets qui contiennent les données car les exemples ont créé des flux à partir d’un fichier local. Au lieu de cela, nous devions traiter la baie d’octets et la convertir en System.IO.MemoryStream. En outre, nous avons renvoyé soit une chaîne pour la modification des commentaires, un bool pour indiquer le succès, ou un tableau d’octets si nous avons modifié la pièce jointe. Enfin, nous sommes passés de la 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

Étant donné qu’aucun centurion ne vaudrait son sel sans sonner une alarme lorsqu’il est attaqué, Christina a créé une notification à l’administrateur lorsque l’IA de Cloudmersive a détecté une image classée comme NSFW. (Pour un peu de plaisir subtil, nous avons changé cela en Not Safe for Acumatica, ou NSFA.) Lorsqu’une image est retournée comme NSFA ou « racy » par classification, nous avons préfixé la valeur du champ UploadFile.Comment avec [NSFA] ou [Racy] respectivement. Christina a mis en place une enquête générique (GI) pour signaler tous les enregistrements UploadFileRevision avec un commentaire commençant par [NSFA]. UploadFileRevision a été utilisé parce que UploadFile.Comment était vide via l’IG, et 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 commercial lors de la création d’un enregistrement surveillé par l’IG, l’administrateur pourrait être averti et envoyé pour enquêter.

Dissection d’un centurion – Partie 2

Dans la partie 2, Gerhard nous donne un regard sous le capot dans le téléchargeur en vrac utilisé dans la démo pour tester les téléchargements de fichiers de 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à, joyeux 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 pour améliorer la disponibilité des matériaux indirects tout en réduisant le coût total de possession pour leurs clients.

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

un