FR2859548A1 - Procede de surveillance de l'execution de programmes sur un ordinateur - Google Patents
Procede de surveillance de l'execution de programmes sur un ordinateur Download PDFInfo
- Publication number
- FR2859548A1 FR2859548A1 FR0310610A FR0310610A FR2859548A1 FR 2859548 A1 FR2859548 A1 FR 2859548A1 FR 0310610 A FR0310610 A FR 0310610A FR 0310610 A FR0310610 A FR 0310610A FR 2859548 A1 FR2859548 A1 FR 2859548A1
- Authority
- FR
- France
- Prior art keywords
- execution
- program
- procedure
- file
- initial program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/28—Error detection; Error correction; Monitoring by checking the correct order of processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/53—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Quality & Reliability (AREA)
- Storage Device Security (AREA)
Abstract
Ce procédé de surveillance de l'exécution de programmes sur un ordinateur comporte les étapes suivantes :- on compare (30) les instructions d'un programme initial (10) aux données d'un fichier de description (16) associé à ce programme initial, le fichier de description comportant des données sur des appels de procédures (12, 14) externes au programme initial, effectués par ces instructions ;- lors de l'exécution (38, 40, 42, 44, 46, 48) des instructions du programme initial, on effectue (46) l'appel de procédures externes uniquement lorsque celles-ci sont prévues et autorisées dans le fichier de description (16).
Description
<Desc/Clms Page number 1>
La présente invention concerne un procédé de surveillance de l'exécution de programmes sur un ordinateur.
Un programme en cours d'exécution sur un ordinateur effectue en général des lectures ou des écritures de données dans des fichiers situés dans des répertoires prédéterminés de l'ordinateur. Il fait également en général appel à des procédures externes, notamment des procédures du système d'exploitation de l'ordinateur sur lequel il s'exécute.
C'est ainsi que certains virus, pour se propager à l'intérieur d'un ordinateur, voire d'un réseau reliant plusieurs ordinateurs, se présentent sous la forme de programmes exécutables, ou bien sont intégrés à des programmes exécutables de l'ordinateur dont ils modifient l'exécution, dans le but d'effectuer certaines actions indésirables telles que : - détruire des fichiers ; - remonter des informations sur l'utilisation de l'ordinateur ; usurper l'identité d'un utilisateur pour envoyer des messages frauduleux vers des destinataires répertoriés dans un fichier prédéterminé de l'ordinateur ; - modifier certains fichiers pour y introduire un autre virus ; - accéder à la base des registres de l'ordinateur pour y trouver des logiciels ou des mots de passe.
Pour lutter contre de tels virus, il existe des programmes anti-virus qui analysent tous les fichiers introduits dans l'ordinateur, que cette introduction de fichiers soit réalisée par copie du contenu d'une disquette, par téléchargement via Internet ou par tout autre type de chargement sur l'ordinateur. Ces programmes anti-virus disposent d'une description d'une liste de virus connus. Ils sont adaptés pour analyser les fichiers chargés sur l'ordinateur et ne pas autoriser la copie de ceux qui comportent un virus.
Cependant les programmes anti-virus ne permettent pas de détecter l'intrusion de nouveaux virus non connus dans la liste. Ils doivent donc être régulièrement mis à jour pour lutter contre de nouveaux virus toujours plus nombreux. Ainsi, ce type de procédé implique nécessairement que s'engage une course entre les émetteurs de virus d'une part et les détecteurs de virus d'autre part, ces derniers ayant toujours à rattraper les premiers.
Il est également possible de se protéger contre une exécution détournée d'un programme d'ordinateur en exigeant que celui-ci soit fourni avec un certificat délivré par un organisme de confiance, garantissant qu'il ne comporte pas de virus. Cette solution n'est pas très satisfaisante puisque la certification est difficile à obtenir et qu'elle est basée
<Desc/Clms Page number 2>
sur un système de confiance. De plus, elle ne permet pas à proprement parler de surveiller l'exécution du programme d'ordinateur.
L'invention vise à remédier à ces inconvénients en fournissant un procédé de surveillance de l'exécution d'un programme d'ordinateur qui soit fiable, également pour lutter contre des virus éventuellement non encore connus des programmes anti-virus.
A cet effet, l'invention a pour objet un procédé de surveillance de l'exécution de programmes sur un ordinateur, caractérisé en ce qu'il comporte les étapes suivantes : - on compare les instructions d'un programme initial aux données d'un fichier de description associé à ce programme initial, le fichier de description comportant des données sur des appels de procédures externes au programme initial, effectués par ces instructions ; lors de l'exécution des instructions du programme initial, on effectue l'appel de procédures externes uniquement lorsque celles-ci sont prévues et autorisées dans le fichier de description.
Ainsi, grâce à l'invention, le programme d'ordinateur peut être surveillé pendant tout le cours de l'exécution de ses instructions, en ce qui concerne ses appels de procédures externes, notamment les procédures du système d'exploitation de l'ordinateur généralement visées par les virus. Même lorsque le virus est programmé pour apparaître avec un temps de retard prédéfini, ce procédé permet de le détecter, puisqu'il permet de surveiller toutes les exécutions d'instructions du programme d'ordinateur.
Dans un mode de réalisation préféré, un procédé selon l'invention peut en outre comporter la caractéristique selon laquelle, lors de l'exécution des instructions du programme initial, le fichier de description comportant en outre des données sur l'environnement d'exécution du programme initial, on teste si les opérations de lecture et/ou écriture de données s'effectuent dans l'environnement prévu dans le fichier de description.
Le programme d'ordinateur peut être alors surveillé pendant tout le cours de l'exécution de ses instructions, également en ce qui concerne ses lectures et écritures de données sur le disque dur de l'ordinateur.
Dans un mode de réalisation préféré, un procédé selon l'invention peut en outre comporter la caractéristique selon laquelle on génère une librairie de protection qui comporte des procédures d'appel de procédures du système d'exploitation de l'ordinateur et de surveillance des opérations de lecture et/ou écriture de données effectuées lors de l'exécution de ces procédures du système d'exploitation, et selon laquelle, lors de l'exécution des instructions du programme initial, on remplace chaque appel de procédure
<Desc/Clms Page number 3>
du système d'exploitation par l'appel de la procédure d'appel et de surveillance correspondante de la librairie de protection.
La librairie de protection constitue alors un écran permanent contre les virus, puisque le nouveau programme exécuté à la place du programme initial n'appelle jamais directement les procédures externes du système d'exploitation.
Un procédé de surveillance de l'exécution d'un programme d'ordinateur selon l'invention peut en outre comporter l'une ou plusieurs des caractéristiques suivantes : - les données sur l'environnement d'exécution du programme initial comportent un élément de définition de l'environnement d'exécution comprenant au moins l'un des éléments suivants : # un élément définissant la localisation du fichier principal du programme initial ; # un élément définissant les noms des répertoires et sous-répertoires où doivent se trouver les fichiers associés au programme initial ; # un élément définissant certains répertoires particuliers identifiés de l'ordinateur, par exemple le répertoire du système d'exploitation et/ou le répertoire des polices de caractères ; # un élément définissant le nombre de fichiers et les noms des fichiers qui doivent se trouver dans chacun desdits répertoires ; # un élément définissant l'arborescence d'enregistrement des clés dans la base de registre de l'ordinateur ; et # un élément définissant les noms de ces clés de registre et leurs valeurs ; - les données sur des appels de procédures externes au programme initial comportent au moins un élément de définition des contrôles à effectuer sur un appel de procédure comprenant : # un élément définissant le nom d'une procédure externe à contrôler ; et # un élément définissant la librairie ou le fichier exécutable auquel cette procédure externe appartient ; - les données sur des appels de procédures externes au programme initial comportent en outre un élément définissant les contrôles à effectuer pour laisser passer ou empêcher l'appel d'une procédure externe, ces contrôles portant au moins l'un des paramètres d'appel suivants : # test de localisation d'un nom de fichier fourni en paramètre, # test de valeur d'un paramètre,
<Desc/Clms Page number 4>
# test d'un bit particulier d'un paramètre ; - le procédé comprend en outre les étapes suivantes : # on génère un nouveau programme à partir du programme initial dans lequel chaque appel de procédure du système d'exploitation des instructions du programme initial est remplacé par l'appel de la procédure d'appel correspondante de la librairie de protection ; # pour l'exécution des instructions du programme initial, on exécute le nouveau programme à la place du programme initial ; le programme initial étant associé à au moins une librairie initiale et/ou au moins un fichier exécutable initial comportant des procédures externes autres que les procédures du système d'exploitation, le procédé comprend en outre les étapes suivantes : # on génère au moins une nouvelle librairie et/ou au moins un nouveau fichier exécutable à partir de la librairie initiale et/ou du fichier exécutable initial, en y remplaçant chaque appel d'une procédure externe du système d'exploitation par un appel de la procédure correspondante de la nouvelle librairie de protection et de surveillance des opérations de lecture et/ou écriture de données effectuées lors de l'exécution de cette procédure externe du système d'exploitation ; # lors de la génération du nouveau programme à partir du programme initial, chaque appel de procédure externe de la librairie initiale et/ou du fichier exécutable initial est remplacé par l'appel de la procédure correspondante de la nouvelle librairie et/ou du nouveau fichier exécutable ; - on vérifie, à l'aide d'une liste conservant en mémoire les fichiers et les clés de registre créés lors de l'exécution du nouveau programme, que celui-ci ne tente pas de supprimer ou d'ouvrir en lecture un fichier ou une clé de registre qu'il n'a pas lui-même créé en cours d'exécution et qui n'est pas prévu dans le fichier de description ; le procédé comporte un étape de signalisation d'un incident, lorsque les instructions du programme initial ne s'exécutent pas dans l'environnement d'exécution défini dans le fichier de description ; -l'étape de signalisation est déclenchée également lorsqu'un appel à une procédure externe effectué lors de l'exécution d'une instruction du programme initial n'est pas prévu ou autorisé dans le fichier de
<Desc/Clms Page number 5>
description, ou lorsque le nouveau programme en cours d'exécution tente de supprimer ou d'ouvrir en lecture un fichier ou une clé de registre qu'il n'a pas lui-même créé en cours d'exécution et qui n'est pas prévu dans le fichier de description. lors de l'étape de signalisation, on stoppe l'exécution du programme en cours.
L'invention sera mieux comprise à la lecture de la description qui va suivre, donnée uniquement à titre d'exemple et faite en se référant aux dessins annexés dans lesquels : - la figure 1 représente schématiquement la structure générale d'un système de mise en oeuvre du procédé selon l'invention ; et - la figure 2 représente les étapes successives d'un procédé selon l'invention.
Le système représenté sur la figure 1 comporte un programme initial 10 destiné à être exécuté sur un ordinateur (non représenté). Pour son exécution sur l'ordinateur, le programme initial 10 peut être associé à plusieurs librairies et/ou fichiers exécutables comportant un certain nombre de procédures externes. Parmi ces procédures externes, certaines sont des procédures du système d'exploitation de l'ordinateur, d'autres sont des procédures fournies avec le programme 10 sous forme de librairies ou fichiers exécutables spécifiques.
A titre d'exemple non limitatif, le programme 10 représenté sur la figure 1 est associé à deux librairies 12 et 14 comportant des procédures externes. Par exemple la librairie 12 comporte des procédures externes fournies avec le programme initial 10, alors que la librairie 14 comporte des procédures du système d'exploitation de l'ordinateur dont certaines sont appelées par le programme. Les procédures du système d'exploitation peuvent être par exemple des demandes d'accès aux fichiers stockés sur le disque dur de l'ordinateur, des demande d'accès à la base de registre de l'ordinateur, ou d'autres programmes.
Le programme initial 10 est accompagné d'un fichier de description 16, tel que celui fourni en annexe B de la description. Le fichier de description 16 est par exemple généré à partir d'un schéma prédéfini de fichiers de description de programmes de type XML, tel que celui fourni en annexe A de la description. Il comporte des données sur l'environnement d'exécution du programme initial et sur des appels de procédures externes effectués lors de l'exécution normale de ses instructions.
<Desc/Clms Page number 6>
A tout moment, un utilisateur ou un administrateur peut modifier ce fichier de description 16 pour ajouter ou supprimer des appels de procédures externes. Ceci a pour effet de limiter ou étendre les possibilités d'exécution du programme initial 10.
Le schéma de description fourni en annexe A comporte par exemple des éléments "ProgDirDeclListType" et "ExtCallDescTypwe" prévus pour décrire l'environnement d'exécution du programme initial, et notamment les répertoires dans lesquels il est supposé s'installer.
Ces mêmes éléments sont prévus pour décrire les répertoires de clés de registre auxquels le programme est autorisé à avoir accès.
L'élément "ExtCalDescType" est en particulier prévu pour décrire les répertoires dans lesquels le programme est autorisé à lire, modifier ou supprimer des données qu'il n'a pas créées lui-même, ainsi que les fichiers qu'il est autorisé à renommer dans ces répertoires.
Plus précisément les éléments spécifiques du schéma de fichiers de description qui permettent de déclarer les conditions d'exécution d'un programme, dans l'exemple fourni en annexe A, sont les éléments "ExecutionEnvironment" et "ExternalCallDesc".
L'élément "ExecutionEnvironment" permet de définir au moins l'un des éléments suivants : - la localisation du programme principal (élément ProgramLocation) ; - les noms des répertoires et sous-répertoires où doivent se trouver les fichiers associés au programme (éléments "ProgramDirectoryDeclaration" et "SubDirectoryList") ; certains répertoires particuliers identifiés de l'ordinateur (répertoire du système d'exploitation, répertoire des polices de caractères, etc.) ; le nombre de fichiers (élément "FileNumber") et les noms des fichiers (élément "File") qui doivent se trouver dans chacun de ces répertoires ; l'arborescence d'enregistrement des clés dans la base de registre (éléments "ProgramKeyDirectoryDeclaration" et "KeyList") ; les noms de ces clés de registre et leurs valeurs (attributs "name" et "value" de l'élément "KeyDirectoryCondition").
L'élément "ExternalCallDesc" permet de définir les contrôles à effectuer sur les appels de procédures externes : - le nom d'une procédure externe à contrôler (élément "FunctionName") ; - la librairie ou le fichier exécutable auquel cette procédure appartient (élément "Library").
<Desc/Clms Page number 7>
De façon optionnelle, il permet aussi de définir les contrôles à effectuer pour laisser passer ou empêcher l'appel de cette procédure (élément "Condition") portant sur au moins l'un des paramètres d'appel suivants : - test de localisation d'un nom de fichier fourni en paramètre (élément "LocationTest") ; - test de valeur d'un paramètre (élément "ValueTest") ; test d'un bit particulier d'un paramètre (élément "BitTest").
A partir de la librairie 14, on génère une nouvelle librairie de protection 22 comportant des procédures d'appel des procédures de la librairie 14 et de surveillance des opérations de lecture et d'écriture de données effectuées lors de l'exécution de ces procédures de la librairie 14. Notamment, les procédures de la librairie de protection 22 sont adaptées pour examiner les conditions à remplir par les paramètres d'appel des procédures externes de la librairie 14 pour permettre l'exécution de celles-ci.
Le programme initial 10, son fichier de description 16 et la librairie 12 sont fournis en entrée d'un module de traitement 18, adapté pour générer un nouveau programme 20 associé à une nouvelle librairie 21.
Les procédures externes de la librairie 12 sont susceptibles de comporter des instructions d'appel de procédures du système d'exploitation que comporte la librairie 14. Le module de traitement 18 est donc adapté pour générer la nouvelle librairie 21 à partir de la librairie 12 en y remplaçant chaque appel de procédure externe de la librairie 14 par un appel de la procédure correspondante de la nouvelle librairie de protection 22.
Il est aussi adapté pour générer le nouveau programme 20 à partir du programme initial 10 en y remplaçant chaque appel de procédure externe de la librairie 12 ou 14 par un appel de la procédure correspondante de la nouvelle librairie 21 ou 22.
Ainsi, la nouvelle librairie de protection 22 fait écran entre, d'une part, le nouveau programme 20 et la nouvelle librairie 21, et, d'autre part, la librairie 14.
La génération de la nouvelle librairie de protection 22 est de préférence indépendante de la génération du nouveau programme 20 et de la nouvelle librairie 21, puisqu'elle concerne des procédures indépendantes de la présence du programme initial 10 dans l'ordinateur. Elle peut être réalisée une fois pour toute lors de l'installation de l'ordinateur. Par contre lors de son exécution, la nouvelle librairie de protection 22 fait appel au fichier de description 16, et à une liste 24 qui sera décrite en référence à la figure 2, pour contrôler tout appel à l'une des procédures de la librairie 14.
Le procédé de surveillance de l'exécution de programmes mis en #uvre par le système décrit précédemment est représenté sur la figure 2.
<Desc/Clms Page number 8>
Il comporte une première étape 30 de lecture du programme d'ordinateur initial 10 et du fichier de description 16 associé. Lors de cette étape, on compare les instructions du programme initial 10 aux données du fichier de description 16 associé au programme.
Lors de l'étape 32 suivante, on peut prévoir l'affichage de procédures externes appelées par les instructions du programme initial 10, mais dont l'appel n'est pas prévu par le fichier de description 16. On peut prévoir également l'affichage de répertoires et de fichiers dans lesquels le programme initial 10 n'est pas autorisé à écrire ou lire des données, tel que prévu par le fichier de description 16. Ces dysfonctionnements peuvent en effet trahir la présence d'un virus perturbant l'exécution prévue des instructions du programme initial 10.
Ensuite, lors d'une étape 34 exécutée par le module de traitement 18, on génère la librairie 21 à partir de la librairie 12.
Lors de cette étape également, on génère le nouveau programme d'ordinateur 20 à partir du programme initial 10, en remplaçant les appels de procédures externes par des appels de procédures correspondantes des nouvelles librairies 21 et 22.
Comme cela a été dit précédemment, la nouvelle librairie 22 a de préférence été générée au préalable, avant l'exécution de ce procédé de surveillance.
Lors de l'étape 36 suivante, on exécute le nouveau programme 20 à la place du programme initial 10.
Pendant son exécution, le nouveau programme 20 appelle une première procédure de la librairie de protection 22 lors d'une étape 38, soit directement, soit indirectement via l'appel d'une procédure de la nouvelle librairie 21.
Lors de l'étape 40 suivante, on teste si cet appel de procédure externe est le premier. Si oui, on passe à une étape 42 de test sur l'environnement d'exécution du nouveau programme 20. Lors de cette étape 42, à l'aide du fichier de description 16, on détermine si le nouveau programme 20 est installé dans le répertoire prévu par le fichier de description 16 et si ses opérations de lecture/écriture s'effectuent dans les répertoires ou sous-répertoires prévus par le fichier de description 16.
Si des problèmes d'environnement d'exécution sont détectés, on passe à une étape 43 de signalisation d'un incident. Lors de cette même étape 43, on arrête de préférence l'exécution du nouveau programme 20. En variante, on peut aussi ignorer l'instruction en cours d'exécution et passer à la suivante dans le nouveau programme 20.
Sinon, on passe à une étape 44 de test. On passe également directement à cette étape 44 suite à l'étape 40, si l'appel de procédure externe effectué n'est pas le premier.
<Desc/Clms Page number 9>
Lors de l'étape 44, on teste s'il y a un problème d'appel d'une procédure externe non prévu par le fichier de description 16. On vérifie également, à l'aide d'une liste 24 conservant en mémoire les fichiers et les clés de registre créés lors de l'exécution du nouveau programme 20, que celui-ci ne tente pas de supprimer ou d'ouvrir en lecture un fichier ou une clé de registre qu'il n'a pas lui-même créé en cours d'exécution et qui n'est pas prévu dans le fichier de description 16. La liste 24 est par exemple stockée par l'ordinateur sous forme d'un fichier.
Si l'un des problèmes précédents est détecté lors de l'étape 44, on passe à l'étape 43. Sinon, on passe à une étape 46 d'exécution de la procédure appelée lors de l'étape 38.
Ensuite, on passe à une étape 48 lors de laquelle on inscrit l'opération effectuée lors de l'étape 46 dans la liste 24, si cette opération a conduit à la création d'au moins un nouveau fichier ou à l'écriture de données dans au moins un fichier existant.
Enfin, on passe de nouveau à l'étape 38 dès que le nouveau programme 20 effectue l'appel d'une nouvelle procédure de la librairie de protection 22, soit directement, soit via l'appel d'une procédure de la nouvelle librairie 21.
Il apparaît clairement qu'un procédé selon l'invention permet de se prémunir efficacement contre l'intrusion de virus sur un ordinateur, en luttant contre leurs effets, plutôt qu'en tentant de les détecter a priori.
On notera que l'invention n'est pas limitée au mode de réalisation précédemment décrit.
En effet, en variante, le fichier de description 16 peut inclure la liste 24.
<Desc/Clms Page number 10>
Annexe A - Exemple de schéma de fichiers de description de programmes <?xml version="1.0" encoding="UTF-8"?> <xs:schemaxmlns:xs = "http://www.w3.org/2001/XMLSchema" elementFormDefault = "qualified" attributeFormDefault="unqualified"> <xs:element name = "ProgramDescription" type = "ProgDescType"/> <xs:complexType name = "ProgDescType"> <xs:sequence> <!-- Déclaration de l'environnement d'excéution du logiciel : répertoire de fichiers + répertoire de clés de regsitre--> <xs:element name = "ExecutionEnvironment" type = "ExecEnvirType"/> <!-- Liste des procédures externes appelables par le logiciel -->
<xs:element name = "ExternalCaIlDesc" type = "ExtCaIlDescType" maxOccurs = "unbounded"/> </xs:sequence> <xs:attribute name = "exeFileName" type = "xs:string" use = "required"/> </xs:complexType> <xs:complexType name = "ExecEnvirType"> <xs:sequence> <!-- Déclaration de répertoires de fichiers utilisés par le logiciel --> <xs:element name = "ProgramDirectoryDeclarationList" type = "ProgDirDeciListType" minOccurs = "0" maxOccurs = "unbounded"/> <!-- Déclaration de conditions sur les répertoires de fichiers utilisés par le logiciel --> <xs:element name = "DirectoryCondition" type = "DirCondType" minOccurs = "0" maxOccurs = "unbounded"/> <!-- Déclaration de répertoires de clés de registres utilisés par le logiciel --> <xs:element name = "ProgramKeyDirectoryDeclarationList" type = "ProgKeyDecIListType" minOccurs = "0"/> <!-- Déclaration de conditions sur les répertoires de clés de registre utilisés par le logiciel --> <xs:element name = "KeyDirectoryCondition" type = "KeyDirCondType"
<xs:element name = "ExternalCaIlDesc" type = "ExtCaIlDescType" maxOccurs = "unbounded"/> </xs:sequence> <xs:attribute name = "exeFileName" type = "xs:string" use = "required"/> </xs:complexType> <xs:complexType name = "ExecEnvirType"> <xs:sequence> <!-- Déclaration de répertoires de fichiers utilisés par le logiciel --> <xs:element name = "ProgramDirectoryDeclarationList" type = "ProgDirDeciListType" minOccurs = "0" maxOccurs = "unbounded"/> <!-- Déclaration de conditions sur les répertoires de fichiers utilisés par le logiciel --> <xs:element name = "DirectoryCondition" type = "DirCondType" minOccurs = "0" maxOccurs = "unbounded"/> <!-- Déclaration de répertoires de clés de registres utilisés par le logiciel --> <xs:element name = "ProgramKeyDirectoryDeclarationList" type = "ProgKeyDecIListType" minOccurs = "0"/> <!-- Déclaration de conditions sur les répertoires de clés de registre utilisés par le logiciel --> <xs:element name = "KeyDirectoryCondition" type = "KeyDirCondType"
<Desc/Clms Page number 11>
minOccurs = "0" maxOccurs = "unbounded"/> </xs:sequence> </xs:complexType> <xs:complexType name = "ProgDirDecIListType"> <xs:sequence> <xs:element name = "ProgramDirectoryDeclaration" type = "ProgDirDecIType" maxOccurs = "unbounded"/> </xs:sequence> </xs:complexType> <!-- Déclaration d'un répertoire de fichiers utilisés par le logiciel --> <xs:complexType name = "ProgDirDecIType"> <xs:attribute name = "name" type = "xs:string" use = "required"/> <xs:attribute name = "value" type = "xs:string" use = "required"/> </xs:complexType> <xs:complexType name = "DirCondType"> <xs:sequence> <xs:element name = "ProgramLocation" type = "ProgLocType" minOccurs = "0" maxOccurs = "unbounded"/> <xs:element name = "SubDirectoryList" type = "SubDirListType" minOccurs="0"/> <xs:element name = "FileNumber" type = "FileNbType" minOccurs = "0" maxOccurs = "unbounded"/> <xs:element name = "FileList" type = "FileListType" maxOccurs = "unbounded"/> </xs:sequence> <xs:attribute name = "directoryBaseType" type = "DirectoryBaseTypeType" use = "required"/> <xs:attribute name = "directoryBase" type = "xs:string" use = "required"/> <xs:attribute name = "subDirectory" type = "xs:string"/> </xs:complexType> <!-- Déclaration de la liste des répertoires de clés de registres utilisés par le logiciel --> <xs:complexType name = "ProgKeyDecIListType"> <xs:sequence> <xs:element name = "ProgramKeyDirectoryDeclaration" type = "ProgKeyDecIType" maxOccurs = "unbounded"/>
<Desc/Clms Page number 12>
</xs:sequence> </xs:complexType> <!-- Déclaration d'un répertoire de clés de registres utilisés par le logiciel --> <xs:complexType name = "ProgKeyDecIType"> <xs:attribute name = "name" type = "xs:string" use = "required"/> <xs:attribute name = "value" type = "xs:string" use = "required"/> </xs:complexType> <xs:simpleType name = "DirectoryBaseTypeType"> <xs:restriction base = "xs:string"> <xs:enumeration value = "registered~directory"/> <xs:enumeration value = "named~directory"/> <xs:enumeration value = "registered~key~directory"/> <xs:enumeration value = "named~key~directory"/> <xs:enumeration value = "declared~key~directory"/> </xs:restriction> </xs:simpleType> <!-- Déclaration de nom de répertoire de fichiers utilisés par le logiciel --> <xs:complexType name = "ProgLocType"> <xs:sequence/> <xs:attribute name = "valueType" type = "ProgLocValueTypeType" use = "required'7> <xs:attribute name = "value" type = "xs:string" use = "required"/> </xs:complexType> <!-- Déclaration de localisation d'un répertoire de fichiers utilisés par le logiciel --> <xs:simpleType name = "ProgLocValueTypeType"> <xs:restriction base = "xs:string"> <xs:enumeration value = "parent~directory"/>
<xs:enumeration value = "number of directory from~root"I> <xs:enumeration value = "disk~drive"/> </xs:restriction> </xs:simpleType> <!-- Déclaration de sous-répertoire de fichiers utilisés par le logiciel --> <xs:complexType name = "SubDirListType"> <xs:sequence> <xs:element name = "SubDirectory" type = "SubDirType" maxOccurs = "unbounded"/>
<xs:enumeration value = "number of directory from~root"I> <xs:enumeration value = "disk~drive"/> </xs:restriction> </xs:simpleType> <!-- Déclaration de sous-répertoire de fichiers utilisés par le logiciel --> <xs:complexType name = "SubDirListType"> <xs:sequence> <xs:element name = "SubDirectory" type = "SubDirType" maxOccurs = "unbounded"/>
<Desc/Clms Page number 13>
</xs:sequence> <xs:attribute name = "maxNumber" type = "xs:integer"/> </xs:complexType> <xs:complexType name = "SubDirType"> <xs:attribute name = "status" type = "SubDirStatusType"/> <xs:attribute name = "name" type = "xs:string"/> </xs:complexType> <xs:simpleType name = "SubDirStatusType"> <xs:restriction base = "xs:string"> <xs:enumeration value = "present"/> <xs:enumeration value = "optional"/> </xs:restriction> </xs:simpleType> <!-- Déclaration de nombre de fichiers dans un répertoire de fichiers utilisé par le logiciel --> <xs:complexType name = "FileNbType"> <xs:sequence/> <xs:attribute name = "operator" type = "OperatorType" use = "required"/> <xs:attribute name = "value" type = "xs:string" use = "required"/> </xs:complexType> <xs:simpleType name = "OperatorType"> <xs:restriction base = "xs:string">
<xs:enumeration value = "equal or~greater~than"/> </xs: restriction> </xs:simpleType> <!-- Déclaration de liste de fichiers devant appartenir à un répertoire de fichiers utilisé par le logiciel --> <xs:complexType name = "FileListType"> <xs:sequence> <xs:element name = "File" type = "FileType" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexType name = "FileType"> <xs:attribute name = "status" type = "FileStatusType" use = "required"/> <xs:attribute name = "value" type = "xs:string" use = "required"/>
<xs:enumeration value = "equal or~greater~than"/> </xs: restriction> </xs:simpleType> <!-- Déclaration de liste de fichiers devant appartenir à un répertoire de fichiers utilisé par le logiciel --> <xs:complexType name = "FileListType"> <xs:sequence> <xs:element name = "File" type = "FileType" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexType name = "FileType"> <xs:attribute name = "status" type = "FileStatusType" use = "required"/> <xs:attribute name = "value" type = "xs:string" use = "required"/>
<Desc/Clms Page number 14>
<xs:attribute name = "count" type = "xs:integer"/> </xs:complexType> <xs:simpleType name = "FileStatusType"> <xs:restriction base = "xs:string"> <xs:enumeration value = "present"/> <xs:enumeration value = "optional"/> <xs:enumeration value = "excluded"/> </xs:restriction> </xs:simpleType> <!-- Déclaration d'un test sur une clé de registre--> <xs:complexType name = "KeyDirCondType"> <xs:sequence> <xs:element name = "SubDirectoryList" type = "SubDirListType" minOccurs = "0"/> <xs:element name = "KeyList" type = "KeyListType" minOccurs = "0"/> </xs:sequence> <xs:attribute name = "keyDirectoryBaseType" type = "DirectoryBaseTypeType" use = "required"/> <xs:attribute name = "keyDirectoryBase" type = "xs:string" use = "required"/> </xs:complexType> <xs:complexType name = "KeyListType"> <xs:sequence> <xs:element name = "Key" type = "KeyType" maxOccurs = "unbounded"/> </xs:sequence> </xs:complexType> <xs:complexType name = "KeyType"> <xs:attribute name = "status" type = "KeyStatusType" use = "required"/> <xs:attribute name = "name" type = "xs:string" use = "required"/> </xs:complexType> <xs:simpleType name = "KeyStatusType"> <xs:restriction base = "xs:string"> <xs:enumeration value = "present"/> <xs:enumeration value = "optional"/>
<Desc/Clms Page number 15>
<xs:enumeration value = "excluded"/> </xs:restriction> </xs:simpleType> <xs:simpleType name = "KeyDirBasisTypeType"> <xs:restriction base = "xs:string"> <xs:enumeration value = "named~key~directory"/> </xs:restriction> </xs:simpleType> <!-- Déclaration d'une procédure externe appelable par le logiciel --> <xs:complexType name = "ExtCallDescType"> <xs:sequence> <xs:element name = "Function" type="FunctionType"/> <xs:element name = "Description" type = "xs:string" minOccurs = "0"/> <xs:element name = "Example" type = "xs:string" minOccurs = "0"/> <xs:element name = "Library" type = "xs:string"/> <xs:element name = "ConditionList" type = "ConditionListType" minOccurs = "0"/> </xs:sequence> </xs:complexType> <xs:complexType name = "FunctionType"> <xs:attribute name = "functionName" type = "functionNameType"/> </xs:complexType> <xs:simpleType name = "functionNameType"> <xs:restriction base = "xs:string"> <xs:enumeration value = "OpenFile"/> <xs:enumeration value = "ReadFile"/> <xs:enumeration value = "RegQueryValueExA"/> <xs:enumeration value = "RegCreateKeyExA"/> <xs:enumeration value = "rename"/> <xs:enumeration value = "remove"/> </xs:restriction> </xs:simpleType> <!-- Déclaration d'un bloc de conditions sur les paramètres d'appels d'une procédure externe--> <xs:complexType name = "ConditionListType">
<Desc/Clms Page number 16>
<xs:sequence> <xs:element name = "Condition" type = "ConditionType" minOccurs = "0" maxOccurs = "unbounded"/> </xs:sequence> </xs:complexType> <!-- Déclaration d'une condition ou d'un sous-bloc de conditions sur les paramètres d'appels d'une procédure externe--> <xs:complexType name = "ConditionType"> <xs:sequence> <xs:element name = "Comment" type = "xs:string" minOccurs = "0"/> <xs:choice> <xs:element name = "Test" type = "TestType" minOccurs = "0"/> <xs:element name = "ConditionBag" type = "ConditionBagType" minOccurs = "0"/> </xs:choice> </xs:sequence> <xs:attribute name = "value" type = "xs:boolean" use = "required"/> <xs:attribute name = "action" type = "ActionType" use "required"/> </xs:complexType> <xs:simpleType name = "ActionType"> <xs:restriction base = "xs:string"> <xs:enumeration value = "REJECT"/> <xs:enumeration value = "ACCEPT"/> </xs:restriction> </xs:simpleType> <!-- Déclaration d'un test élémentaire à faire sur un paramètre à l'appel d'une procédure externe--> <xs:complexType name = "TestType"> <xs:choice> <xs:element name = "LocationTest" type = "LocationTestType"/> <xs:element name = "BitTest" type = "BitTestType"/> <xs:element name="ValueTest" type = "ValueTestType"/> </xs:choice> </xs:complexType>
<Desc/Clms Page number 17>
<!-- Déclaration d'un test sur une variable contenant le chemin et le nom d'un fichier indiqué en paramètre à l'appel d'une procédure externe--> <xs:complexType name = "LocationTestType"> <xs:sequence/> <xs:attribute name = "parameter" type = "xs :integer" = "required"/> <xs:attribute name = "parameterContent" type = "parameterContentType"/> <xs:attribute name = "locationTestOp" type = "locationTestOpType"/> <xs:attribute name = "directoryBaseType" type = "DirectoryBaseTypeType"/> <xs:attribute name = "directoryBase" type = "xs:string"/> <xs:attribute name = "subDirectory" type = "xs:string"/> </xs:complexType> <xs:simpleType name = "locationTestOpType"> <xs:restriction base = "xs:string">
<xs:enumeration value = "IS~NOT~IN~DIRECTORY7> <xs:enumeration value = "IS~IN~DIRECTORY"/>
<xs:enumeration value = "IS-NOT-SUB-DIRECTORY"/> <xs:enumeration value = "IS~SUB~DIRECTORY"/> </xs:restriction> </xs:simpleType> <xs:simpleType name = "parameterContentType"> <xs:restriction base = "xs:string"> <xs:enumeration value = "NAME~W~OR~WO~PATH"/> </xs:restriction> </xs:simpleType> <!-- Déclaration d'un test portant sur un ou des bits particuliers d'un paramètre à l'appel d'une procédure externe--> <xs:complexType name = "BitTestType"> <xs:sequence/> <xs:attribute name = "parameter" type = "xs :integer" = "required"/> <xs:attribute name = "bitTestOp" type = "bitTestOpType" use = "required"/> <xs:attribute name = "maskHexValue" type = "xs:string" use = "required"/> </xs:complexType> <xs:simpleType name = "bitTestOpType"> <xs:restriction base = "xs:string"> <xs:enumeration value = "TRUE~IF~NON~ZERO"/>
<xs:enumeration value = "IS~NOT~IN~DIRECTORY7> <xs:enumeration value = "IS~IN~DIRECTORY"/>
<xs:enumeration value = "IS-NOT-SUB-DIRECTORY"/> <xs:enumeration value = "IS~SUB~DIRECTORY"/> </xs:restriction> </xs:simpleType> <xs:simpleType name = "parameterContentType"> <xs:restriction base = "xs:string"> <xs:enumeration value = "NAME~W~OR~WO~PATH"/> </xs:restriction> </xs:simpleType> <!-- Déclaration d'un test portant sur un ou des bits particuliers d'un paramètre à l'appel d'une procédure externe--> <xs:complexType name = "BitTestType"> <xs:sequence/> <xs:attribute name = "parameter" type = "xs :integer" = "required"/> <xs:attribute name = "bitTestOp" type = "bitTestOpType" use = "required"/> <xs:attribute name = "maskHexValue" type = "xs:string" use = "required"/> </xs:complexType> <xs:simpleType name = "bitTestOpType"> <xs:restriction base = "xs:string"> <xs:enumeration value = "TRUE~IF~NON~ZERO"/>
<Desc/Clms Page number 18>
<xs:enumeration value = "TRUE~IF~ZERO"/> </xs:restriction> </xs:simpleType> <!-- Déclaration d'un test portant sur la valeur d'un paramètre à l'appel d'une procédure externe--> <xs:complexType name = "ValueTestType"> <xs:sequence/> <xs:attribute name = "parameter" type = "xs:integer" use = "required"/> <xs:attribute name = "valueTestOp" type = "valueTestOpType" use = "required"/> <xs:attribute name = "parameterValue" type = "xs:string" use = "required"/> <xs:attribute name = "parameterMask" type = "xs:string"/> </xs:complexType> <xs:simpleType name = "valueTestOpType"> <xs:restriction base = "xs:string"> <xs:enumeration value = "EQUALS"/> <xs:enumeration value = "NOT~EQUALS"/> <xs:enumeration value = "CONTAINS"/> <xs:enumeration value = "GREATER~THAN7> <xs:enumeration value = "GREATER~THAN~OR~EQUALS"/> <xs:enumeration value = "LESS~THAN"/>
<xs:enumeration value = "LESS~THAN~OR~EQUALS'7> </xs:restriction> </xs:simpleType> <xs:simpleType name = "ContentType"> <xs:restriction base = "xs:string"> <xs:enumeration value = "REJECT"/> <xs:enumeration value = "ACCEPT"/> </xs:restriction> </xs:simpleType> <xs:complexType name = "ConditionBagType"> <xs:sequence maxOccurs = "unbounded"> <xs:choice> <xs:element name = "ConditionBag" type = "ConditionBagType7> <xs:element name = "LocationTest"
<xs:enumeration value = "LESS~THAN~OR~EQUALS'7> </xs:restriction> </xs:simpleType> <xs:simpleType name = "ContentType"> <xs:restriction base = "xs:string"> <xs:enumeration value = "REJECT"/> <xs:enumeration value = "ACCEPT"/> </xs:restriction> </xs:simpleType> <xs:complexType name = "ConditionBagType"> <xs:sequence maxOccurs = "unbounded"> <xs:choice> <xs:element name = "ConditionBag" type = "ConditionBagType7> <xs:element name = "LocationTest"
<Desc/Clms Page number 19>
type = "LocationTestType"/> <xs:element name = "BitTest" type = "BitTestType"/> <xs:element name = "ValueTest" type = "ValueTestType"/> </xs:choice> </xs:sequence> <xs:attribute name = "type" type = "ConditionBagTypeType" use = "required"/> </xs:complexType> <!-- Déclaration d'un groupe de tests combinés par une opération "AND" ou "OR" --> <xs:simpleType name = "ConditionBagTypeType"> <xs:restriction base = "xs:string"> <xs:enumeration value = "AND"/> <xs:enumeration value = "OR"/> </xs:restriction> </xs:simpleType> </xs:schema>
<Desc/Clms Page number 20>
Annexe B - Exemple de fichier de description de programme <?xml version="1. 0" encoding="UTF-8"?> <ProgramDescription xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "E:\ ExeDesc. xsd" exeFileName = "Mon Logiciel. EXE"> <ExecutionEnvironment> <ProgramDirectoryDeclarationList> <ProgramDirectoryDeclaration name = "TempFileDir" value = "C:/Program Files/Temp"/> </Program DirectoryDeclaration List> <DirectoryCondition directoryBaseType = "registered~directory" directoryBase = "ProgramDirectory"> <ProgramLocation valueType = "parent~directory" value = "Program Files/myDirectory"/> <ProgramLocation valueType = "number~of~directory~from~root" value = "2"/> <ProgramLocation valueType = "disk~drive" value = "C"/> <SubDirectoryList maxNumber = "2"> <SubDirectory status = "optional" name = "data"/> <SubDirectory status = "present" name = "archive"/> </SubDirectoryList>
<FileNumber operator = "equal or~greater~than" value = "12"/> <FileList> <File status = "present" value = "xxxx.ini"/> <File status = "optional" value = "xxxx.log"/> <File status = "excluded" value = "*.COM"/> <File status = "excluded" value = "*.DLL"/> <File status = "présent" value = "*.INI" count = "2"/> </FileList> </DirectoryCondition> <DirectoryCondition directoryBaseType = "registered~directory" directoryBase = "ProgramDirectory" subDirectory = "data"> <SubDirectoryList maxNumber = "3"> <SubDirectory status = "optional" name = "image"/> <SubDirectory status = "present" name = "son"/>
<FileNumber operator = "equal or~greater~than" value = "12"/> <FileList> <File status = "present" value = "xxxx.ini"/> <File status = "optional" value = "xxxx.log"/> <File status = "excluded" value = "*.COM"/> <File status = "excluded" value = "*.DLL"/> <File status = "présent" value = "*.INI" count = "2"/> </FileList> </DirectoryCondition> <DirectoryCondition directoryBaseType = "registered~directory" directoryBase = "ProgramDirectory" subDirectory = "data"> <SubDirectoryList maxNumber = "3"> <SubDirectory status = "optional" name = "image"/> <SubDirectory status = "present" name = "son"/>
<Desc/Clms Page number 21>
<SubDirectory status = "present" name = "texte"/> </SubDirectoryList> <FileList> <File status = "présent" value = "xyz.dll"/> <File status = "excluded" value = "*.EXE"/> </FileList> </DirectoryCondition> <DirectoryCondition directoryBaseType = "registered~directory" directoryBase = "WindowsSystemDirectory"> <FileList> <File status = "présent" value = "xyz.dll"/> <File status = "excluded" value = "*.EXE"/> </FileList> </DirectoryCondition> <DirectoryCondition directoryBaseType = "registered~directory" directoryBase = "WindowsFontsDirectory"> <FileList> <File status = "présent" value = "xyz.ttf"/> <File status = "excluded" value = "*.EXE"/> </FileList> </DirectoryCondition> <ProgramKeyDirectoryDeclarationList> <ProgramKeyDirectoryDeclaration name = "ProgramKeyDirectory"
value = "HKEY~LOCAL~MACHINBSOFTWARBmySoftware7> <IProgramKeyDirectoryDeclarationList> <KeyDirectoryCondition keyDirectoryBaseType = "declared~key~directory" keyDirectoryBase = "ProgramKeyDirectory"> <SubDirectoryList maxNumber = "2"> <SubDirectory status = "present" name = "son"/> <SubDirectory status = "present" name = "texte"/> </SubDirectoryList> <KeyList> <Key status = "present" name = "xyz.dll"/> <Key status = "excluded" name = "*.EXE"/> </KeyList> </KeyDirectoryCondition>
value = "HKEY~LOCAL~MACHINBSOFTWARBmySoftware7> <IProgramKeyDirectoryDeclarationList> <KeyDirectoryCondition keyDirectoryBaseType = "declared~key~directory" keyDirectoryBase = "ProgramKeyDirectory"> <SubDirectoryList maxNumber = "2"> <SubDirectory status = "present" name = "son"/> <SubDirectory status = "present" name = "texte"/> </SubDirectoryList> <KeyList> <Key status = "present" name = "xyz.dll"/> <Key status = "excluded" name = "*.EXE"/> </KeyList> </KeyDirectoryCondition>
<Desc/Clms Page number 22>
</ExecutionEnvironment> <ExternaICaIIDesc> <Function functionName = "OpenFile"/> <Description>Ouverture de fichier</Description> <Example>hfile = OpenFile(FileName,&ofstruct,OF~READ); </Example> <Library>MSVCRT.DLL</Library> <ConditionList> <Condition value = "true" action = "REJECT"> <Comment>
To exclude READING of files not created by the program outside the program directory and subdirectory "data" </Comment> <ConditionBag type = "AND"> <ConditionBag type = "AND"> <LocationTest parameter = "1 parameterContent = "NAME~W~OR~WO~PATH"
locationTestOp = "IS~NOT ~IN~DIRECTORY" directoryBaseType = "registered~directory" directoryBase = "ProgramDirectory" <LocationTest parameter = "1" parameterContent = "NAME~W~OR~WO~PATH"
locationTestOp = "IS NOT SUB DIRECTORY" directoryBase = "ProgramDirectory" subDirectory = "data"/> </ConditionBag> <ConditionBag type="OR"> <BitTest parameter = "3" bitTestOp = "TURE~IF~NON~ZERO" maskHexValue = "0080"/> <BitTest parameter = "3" bitTestOp = "TRUE~IF~NON~ZERO" maskHexValue="0001 "/> <ValueTest parameter = "3" valueTestOp = "EQUALS" parameterValue = "124"
To exclude READING of files not created by the program outside the program directory and subdirectory "data" </Comment> <ConditionBag type = "AND"> <ConditionBag type = "AND"> <LocationTest parameter = "1 parameterContent = "NAME~W~OR~WO~PATH"
locationTestOp = "IS~NOT ~IN~DIRECTORY" directoryBaseType = "registered~directory" directoryBase = "ProgramDirectory" <LocationTest parameter = "1" parameterContent = "NAME~W~OR~WO~PATH"
locationTestOp = "IS NOT SUB DIRECTORY" directoryBase = "ProgramDirectory" subDirectory = "data"/> </ConditionBag> <ConditionBag type="OR"> <BitTest parameter = "3" bitTestOp = "TURE~IF~NON~ZERO" maskHexValue = "0080"/> <BitTest parameter = "3" bitTestOp = "TRUE~IF~NON~ZERO" maskHexValue="0001 "/> <ValueTest parameter = "3" valueTestOp = "EQUALS" parameterValue = "124"
<Desc/Clms Page number 23>
parameterMask = "OOOOFO"/> </ConditionBag> </ConditionBag> </Condition> </ConditionList> </ExternalCallDesc> <ExternalCallDesc> <Function functionName = "ReadFile"/> <Description>Lecture de fichier ouvert</Description> <Example>ReadFile(hFileLec, tmp, IgMaxTmp, &nbOctetsLus, NULL); </Example> <Library>MSVCRT.DLL</Library> </ExternalCallDesc> <ExternalCallDesc> <Function functionName = "RegQueryValueExA"/> <Description>Lecture d'un registre</Description> <Example> RegQueryValueEx(hProgNameKey, -T("Path"), NULL, &typeVariable, (LPBYTE)&lpszValeurChemin, &IgTamponValeurChemin); </Example>
<Library> ADV API32.DLL</Library> <ConditionList> <Condition value = "true" action = "ACCEPT"> <Comment>
To exclude READING of keys not created by the program outside the program keydirectory </Comment> <ConditionBag type = "OR"> <LocationTest parameter = "1" parameterContent = "NAME~W~OR~WO~PATH" locationTestOp = "IS~IN~DIRECTORY" directoryBaseType = "registered~key~directory" directoryBase = "ProgramKeyDirectory" subDirectory = "data"/> <LocationTest parameter = "1" parameterContent = "NAME~W~OR~WO~PATH"
<Library> ADV API32.DLL</Library> <ConditionList> <Condition value = "true" action = "ACCEPT"> <Comment>
To exclude READING of keys not created by the program outside the program keydirectory </Comment> <ConditionBag type = "OR"> <LocationTest parameter = "1" parameterContent = "NAME~W~OR~WO~PATH" locationTestOp = "IS~IN~DIRECTORY" directoryBaseType = "registered~key~directory" directoryBase = "ProgramKeyDirectory" subDirectory = "data"/> <LocationTest parameter = "1" parameterContent = "NAME~W~OR~WO~PATH"
<Desc/Clms Page number 24>
locationTestOp = "IS~SUB~DIRECTORY" directoryBaseType = "registered~key~directory" directoryBase = "ProgramKeyDirectory" subDirectory = "data"/> </ConditionBag> </Condition> <Condition value = "true" action = "REJECT"/> </ConditionList> </ExternalCallDesc> <ExternalCallDesc> <Function functionName = "RegCreateKeyExA"/>
<Description>Création d'un pointeur sur une clé de reg istre</Description> <Example> RegQueryValueEx(hProgNameKey, -T("Path"), NULL, &typeVariable, (LPBYTE)&lpszValeurChemin, &IgTamponValeurChemin); </Example> <Library> ADVAPI32.DLL</Library> </ExternalCallDesc> <ExternalCallDesc> <Function functionName = "rename"/> <Description>renommage d'un fichier</Description> <Example>int= rename( const char *oldname, const char *newname ); </Example> <Library>MFC42.DLL</Library> <ConditionList> <Condition value = "true" action = "REJECT"> <Comment>
To exclude RENAMING of files not created by the program outside the program directory and subdirectory "data" </Comment> <ConditionBag type = "AND"> <LocationTest parameter = "1" " parameterContent = "NAME~W~OR~WO~PATH" locationTestOp = "IS~NOT ~IN~DIRECTORY" directoryBaseType = "registered~directory"
<Description>Création d'un pointeur sur une clé de reg istre</Description> <Example> RegQueryValueEx(hProgNameKey, -T("Path"), NULL, &typeVariable, (LPBYTE)&lpszValeurChemin, &IgTamponValeurChemin); </Example> <Library> ADVAPI32.DLL</Library> </ExternalCallDesc> <ExternalCallDesc> <Function functionName = "rename"/> <Description>renommage d'un fichier</Description> <Example>int= rename( const char *oldname, const char *newname ); </Example> <Library>MFC42.DLL</Library> <ConditionList> <Condition value = "true" action = "REJECT"> <Comment>
To exclude RENAMING of files not created by the program outside the program directory and subdirectory "data" </Comment> <ConditionBag type = "AND"> <LocationTest parameter = "1" " parameterContent = "NAME~W~OR~WO~PATH" locationTestOp = "IS~NOT ~IN~DIRECTORY" directoryBaseType = "registered~directory"
<Desc/Clms Page number 25>
directoryBase = "ProgramDirectory"/> <LocationTest parameter = "1" parameterContent = "NAME~W~OR~WO~PATH" locationTestOp = "IS~NOT~SUB~DIRECTORY" directoryBaseType = "registered~directory" directoryBase = "ProgramDirectory"/> </ConditionBag> </Condition> </ConditionList> </ExternalCallDesc> <ExternalCallDesc> <Function functionName = "remove"/> <Description>suppression d'un fichier</Description> <Example>int = remove(const char * pathName);</Example> <Library>MFC42.DLL</Library> <ConditionList> <Condition value = "true" action = "REJECT"> <Comment>
To exclude REMOVING of files not created by the program outside the program directory and subdirectory "data" </Comment> <ConditionBag type = "AND"> <LocationTest parameter = "1" parameterContent = "NAME~W~OR~WO~PATH" locationTestOp = "IS~NOT~IN~DIRECTORY" directoryBaseType = "registered~directory" directoryBase = "ProgramDirectory"/> <LocationTest parameter = "1" parameterContent = "NAME~W~OR~WO~PATH" locationTestOp = "IS~NOT~SUB~DIRECTORY" directoryBaseType = "registered~directory" directoryBase = "ProgramDirectory"/> </ConditionBag> </Condition> </ConditionList> </ExternalCallDesc>
To exclude REMOVING of files not created by the program outside the program directory and subdirectory "data" </Comment> <ConditionBag type = "AND"> <LocationTest parameter = "1" parameterContent = "NAME~W~OR~WO~PATH" locationTestOp = "IS~NOT~IN~DIRECTORY" directoryBaseType = "registered~directory" directoryBase = "ProgramDirectory"/> <LocationTest parameter = "1" parameterContent = "NAME~W~OR~WO~PATH" locationTestOp = "IS~NOT~SUB~DIRECTORY" directoryBaseType = "registered~directory" directoryBase = "ProgramDirectory"/> </ConditionBag> </Condition> </ConditionList> </ExternalCallDesc>
<Desc/Clms Page number 26>
</Program Description>
Claims (12)
1. Procédé de surveillance de l'exécution de programmes sur un ordinateur, caractérisé en ce qu'il comporte les étapes suivantes : - on compare (30) les instructions d'un programme initial (10) aux données d'un fichier de description (16) associé à ce programme initial, le fichier de description comportant des données sur des appels de procédures (12,14) externes au programme initial, effectués par ces instructions ; lors de l'exécution (36,38, 40,42, 44,46, 48) des instructions du programme initial, on effectue (46) l'appel de procédures externes uniquement lorsque celles-ci sont prévues et autorisées dans le fichier de description (16).
2. Procédé de surveillance de l'exécution de programmes sur un ordinateur selon la revendication 1, dans lequel lors de l'exécution (36,38, 40,42, 44,46, 48) des instructions du programme initial, le fichier de description (16) comportant en outre des données sur l'environnement d'exécution du programme initial, on teste (42) si les opérations de lecture et/ou écriture de données s'effectuent dans l'environnement prévu dans le fichier de description (16).
3. Procédé de surveillance de l'exécution de programmes sur un ordinateur selon la revendication 2, dans lequel les données sur l'environnement d'exécution du programme initial (10) comportent un élément de définition de l'environnement d'exécution comprenant au moins l'un des éléments suivants : - un élément définissant la localisation du fichier principal du programme initial ; - un élément définissant les noms des répertoires et sous-répertoires où doivent se trouver les fichiers associés au programme initial ; un élément définissant certains répertoires particuliers identifiés de l'ordinateur, par exemple le répertoire du système d'exploitation et/ou le répertoire des polices de caractères ; - un élément définissant le nombre de fichiers et les noms des fichiers qui doivent se trouver dans chacun desdits répertoires ; un élément définissant l'arborescence d'enregistrement des clés dans la base de registre de l'ordinateur ; -un élément définissant les noms de ces clés de registre et leurs valeurs.
4. Procédé de surveillance de l'exécution de programmes sur un ordinateur selon l'une quelconque des revendications 1 à 3, dans lequel les données sur des appels de
<Desc/Clms Page number 28>
procédures (12,14) externes au programme initial comportent au moins un élément de définition des contrôles à effectuer sur un appel de procédure comprenant : - un élément définissant le nom d'une procédure externe à contrôler ; - un élément définissant la librairie ou le fichier exécutable auquel cette procédure externe appartient.
5. Procédé de surveillance de l'exécution de programmes sur un ordinateur selon la revendication 4, dans lequel les données sur des appels de procédures (12,14) externes au programme initial comportent en outre un élément définissant les contrôles à effectuer pour laisser passer ou empêcher l'appel d'une procédure externe, ces contrôles portant sur au moins l'un des paramètres d'appel suivants : # test de localisation d'un nom de fichier fourni en paramètre ; # test de valeur d'un paramètre ; # test d'un bit particulier d'un paramètre.
6. Procédé de surveillance de l'exécution de programmes sur un ordinateur selon l'une quelconque des revendications 1 à 5, dans lequel on génère une librairie de protection (22) qui comporte des procédures d'appel de procédures du système d'exploitation de l'ordinateur et de surveillance des opérations de lecture et/ou écriture de données effectuées lors de l'exécution de ces procédures du système d'exploitation, et dans lequel, lors de l'exécution des instructions du programme initial, on remplace chaque appel de procédure du système d'exploitation (14) par l'appel de la procédure d'appel et de surveillance correspondante de la librairie de protection (22).
7. Procédé de surveillance de l'exécution de programmes sur un ordinateur selon la revendication 6, comprenant en outre les étapes suivantes : - on génère (34) un nouveau programme (20) à partir du programme initial (10) dans lequel chaque appel de procédure du système d'exploitation (14) des instructions du programme initial est remplacé par l'appel de la procédure d'appel correspondante de la librairie de protection (22) ; - pour l'exécution des instructions du programme initial, on exécute (38) le nouveau programme (20) à la place du programme initial (10).
8. Procédé de surveillance de l'exécution de programmes sur un ordinateur selon la revendications 7, dans lequel le programme initial étant associé à au moins une librairie initiale et/ou au moins un fichier exécutable initial (12) comportant des procédures externe autres que les procédures du système d'exploitation, le procédé comprend en outre les étapes suivantes : - on génère (34) au moins une nouvelle librairie et/ou au moins un nouveau fichier exécutable (21) à partir de la librairie initiale et/ou du fichier exécutable
<Desc/Clms Page number 29>
initial (12), en y remplaçant chaque appel d'une procédure externe du système d'exploitation (14) par un appel de la procédure correspondante de la nouvelle librairie de protection (22) et de surveillance des opérations de lecture et/ou écriture de données effectuées lors de l'exécution de cette procédure externe du système d'exploitation ; - lors de la génération (34) du nouveau programme (20) à partir du programme initial (10), chaque appel de procédure externe de la librairie initiale et/ou du fichier exécutable initial (12) est remplacé par l'appel de la procédure correspondante de la nouvelle librairie et/ou du nouveau fichier exécutable (21).
9. Procédé de surveillance de l'exécution de programmes sur un ordinateur selon la revendication 7 ou 8, dans lequel on vérifie, à l'aide d'une liste (24) conservant en mémoire les fichiers et les clés de registre créés lors de l'exécution du nouveau programme (20), que celui-ci ne tente pas de supprimer ou d'ouvrir en lecture un fichier ou une clé de registre qu'il n'a pas lui-même créé en cours d'exécution et qui n'est pas prévu dans le fichier de description (16).
10. Procédé de surveillance de l'exécution de programmes sur un ordinateur selon l'une quelconque des revendications 1 à 9, comportant un étape (43) de signalisation d'un incident, lorsque les instructions du programme initial (10) ne s'exécutent pas dans l'environnement d'exécution défini dans le fichier de description (16).
11. Procédé de surveillance de l'exécution de programmes sur un ordinateur selon les revendications 9 et 10, dans lequel l'étape de signalisation (43) est déclenchée également lorsqu'un appel à une procédure externe (12,14) effectué lors de l'exécution d'une instruction du programme initial (10) n'est pas prévu ou autorisé dans le fichier de description (16), ou lorsque le nouveau programme (20) en cours d'exécution tente de supprimer ou d'ouvrir en lecture un fichier ou une clé de registre qu'il n'a pas lui-même créé en cours d'exécution et qui n'est pas prévu dans le fichier de description (16).
12. Procédé de surveillance de l'exécution de programmes sur un ordinateur selon la revendication 10 ou 11, dans lequel, lors de l'étape de signalisation (43), on stoppe l'exécution du programme (10,20) en cours.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR0310610A FR2859548B1 (fr) | 2003-09-09 | 2003-09-09 | Procede de surveillance de l'execution de programmes sur un ordinateur |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR0310610A FR2859548B1 (fr) | 2003-09-09 | 2003-09-09 | Procede de surveillance de l'execution de programmes sur un ordinateur |
Publications (2)
Publication Number | Publication Date |
---|---|
FR2859548A1 true FR2859548A1 (fr) | 2005-03-11 |
FR2859548B1 FR2859548B1 (fr) | 2005-11-25 |
Family
ID=34178863
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
FR0310610A Expired - Fee Related FR2859548B1 (fr) | 2003-09-09 | 2003-09-09 | Procede de surveillance de l'execution de programmes sur un ordinateur |
Country Status (1)
Country | Link |
---|---|
FR (1) | FR2859548B1 (fr) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2928755A1 (fr) * | 2008-03-14 | 2009-09-18 | Sagem Securite Sa | Procede de securisation d'une execution d'un programme |
EP2521064A1 (fr) * | 2011-05-04 | 2012-11-07 | STMicroelectronics (Rousset) SAS | Protection d'une mémoire volatile contre des virus par modification du contenu d'une instruction |
EP2521063A1 (fr) * | 2011-05-04 | 2012-11-07 | STMicroelectronics (Rousset) SAS | Protection d'une mémoire volatile contre des virus par changement d'instructions |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1999010795A1 (fr) * | 1997-08-28 | 1999-03-04 | Microsoft Corporation | Amelioration de la securite pour code executable hors securite |
US6073239A (en) * | 1995-12-28 | 2000-06-06 | In-Defense, Inc. | Method for protecting executable software programs against infection by software viruses |
WO2001037094A1 (fr) * | 1999-11-14 | 2001-05-25 | Clicknet Software, Inc. | Procede permettant l'execution sure d'une fonction par validation d'adresses d'appel |
-
2003
- 2003-09-09 FR FR0310610A patent/FR2859548B1/fr not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6073239A (en) * | 1995-12-28 | 2000-06-06 | In-Defense, Inc. | Method for protecting executable software programs against infection by software viruses |
WO1999010795A1 (fr) * | 1997-08-28 | 1999-03-04 | Microsoft Corporation | Amelioration de la securite pour code executable hors securite |
WO2001037094A1 (fr) * | 1999-11-14 | 2001-05-25 | Clicknet Software, Inc. | Procede permettant l'execution sure d'une fonction par validation d'adresses d'appel |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2928755A1 (fr) * | 2008-03-14 | 2009-09-18 | Sagem Securite Sa | Procede de securisation d'une execution d'un programme |
WO2009115712A2 (fr) * | 2008-03-14 | 2009-09-24 | Sagem Securite | Procede de securisation d'une execution d'un programme |
WO2009115712A3 (fr) * | 2008-03-14 | 2009-11-12 | Sagem Securite | Procede de securisation d'une execution d'un programme |
US8621617B2 (en) | 2008-03-14 | 2013-12-31 | Morpho | Method of securing execution of a program |
EP2521064A1 (fr) * | 2011-05-04 | 2012-11-07 | STMicroelectronics (Rousset) SAS | Protection d'une mémoire volatile contre des virus par modification du contenu d'une instruction |
EP2521063A1 (fr) * | 2011-05-04 | 2012-11-07 | STMicroelectronics (Rousset) SAS | Protection d'une mémoire volatile contre des virus par changement d'instructions |
FR2974920A1 (fr) * | 2011-05-04 | 2012-11-09 | St Microelectronics Rousset | Protection d'une memoire volatile contre des virus par modification du contenu d'une instruction |
FR2974919A1 (fr) * | 2011-05-04 | 2012-11-09 | St Microelectronics Rousset | Protection d'une memoire volatile contre des virus par changement d'instructions |
US9165165B2 (en) | 2011-05-04 | 2015-10-20 | Stmicroelectronics (Rousset) Sas | Protection of a non-volatile memory by change of instructions |
US9286470B2 (en) | 2011-05-04 | 2016-03-15 | Stmicroelectronics (Rousset) Sas | Protection of a volatile memory against viruses by modification of the content of an instruction |
US9311510B2 (en) | 2011-05-04 | 2016-04-12 | Stmicroelectronics (Rousset) Sas | Protection of a non-volatile memory by change of instructions |
US9563787B2 (en) | 2011-05-04 | 2017-02-07 | Stmicroelectronics (Rousset) Sas | Protection of a non-volatile memory by change of instructions |
Also Published As
Publication number | Publication date |
---|---|
FR2859548B1 (fr) | 2005-11-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11601442B2 (en) | System and method associated with expedient detection and reconstruction of cyber events in a compact scenario representation using provenance tags and customizable policy | |
US10984097B2 (en) | Methods and apparatus for control and detection of malicious content using a sandbox environment | |
US11645383B2 (en) | Early runtime detection and prevention of ransomware | |
Snyder et al. | Most websites don't need to vibrate: A cost-benefit approach to improving browser security | |
Hedin et al. | JSFlow: Tracking information flow in JavaScript and its APIs | |
Grier et al. | Secure web browsing with the OP web browser | |
King et al. | Backtracking intrusions | |
KR100519842B1 (ko) | 검색 요구 처리 방법, 장치, 기록 매체 및 바이러스 데이터베이스 구축 방법 | |
US6907396B1 (en) | Detecting computer viruses or malicious software by patching instructions into an emulator | |
US10462160B2 (en) | Method and system for identifying uncorrelated suspicious events during an attack | |
JP2018073423A (ja) | ファイル変更マルウェア検出 | |
US20120311713A1 (en) | Detecting persistent vulnerabilities in web applications | |
US20070192623A1 (en) | Method and apparatus for preventing unauthorized access to computer system resources | |
US11265348B2 (en) | Ongoing and on-demand secure verification of audit compliance | |
US10880316B2 (en) | Method and system for determining initial execution of an attack | |
US9621677B1 (en) | Monitoring accesses to computer source code | |
Abbadini et al. | Lightweight cloud application sandboxing | |
Pouryousef et al. | Let me join two worlds! analyzing the integration of web and native technologies in hybrid mobile apps | |
FR2859548A1 (fr) | Procede de surveillance de l'execution de programmes sur un ordinateur | |
US20220335122A1 (en) | Command injection identification | |
Eshete et al. | Attack analysis results for adversarial engagement 1 of the darpa transparent computing program | |
US20120030760A1 (en) | Method and apparatus for combating web-based surreptitious binary installations | |
Finnigan et al. | Oracle Incident response and forensics | |
Harada et al. | Access policy generation system based on process execution history | |
KR20190020999A (ko) | 악성프로그램 처리장치 및 처리방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
ST | Notification of lapse |
Effective date: 20120531 |