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 PDF

Info

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
Application number
FR0310610A
Other languages
English (en)
Other versions
FR2859548B1 (fr
Inventor
Christian Bertin
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Orange SA
Original Assignee
France Telecom SA
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by France Telecom SA filed Critical France Telecom SA
Priority to FR0310610A priority Critical patent/FR2859548B1/fr
Publication of FR2859548A1 publication Critical patent/FR2859548A1/fr
Application granted granted Critical
Publication of FR2859548B1 publication Critical patent/FR2859548B1/fr
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/28Error detection; Error correction; Monitoring by checking the correct order of processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring 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/53Monitoring 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic 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 -->
Figure img00100001

<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"/>
Figure img00120001

<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">
Figure img00130001

<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">
Figure img00170001

<xs:enumeration value = "IS~NOT~IN~DIRECTORY7> <xs:enumeration value = "IS~IN~DIRECTORY"/>
Figure img00170002

<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"/>
Figure img00180001

<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>
Figure img00200001

<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"
Figure img00210001

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"
Figure img00220001

locationTestOp = "IS~NOT ~IN~DIRECTORY" directoryBaseType = "registered~directory" directoryBase = "ProgramDirectory" <LocationTest parameter = "1" parameterContent = "NAME~W~OR~WO~PATH"
Figure img00220002

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>
Figure img00230001

<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"/>
Figure img00240001

<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>
<Desc/Clms Page number 26>
</Program Description>

Claims (12)

REVENDICATIONS
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.
FR0310610A 2003-09-09 2003-09-09 Procede de surveillance de l'execution de programmes sur un ordinateur Expired - Fee Related FR2859548B1 (fr)

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)

* Cited by examiner, † Cited by third party
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
EP2521063A1 (fr) * 2011-05-04 2012-11-07 STMicroelectronics (Rousset) SAS Protection d'une mémoire volatile contre des virus par changement d'instructions
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

Citations (3)

* Cited by examiner, † Cited by third party
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

Patent Citations (3)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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
EP2521063A1 (fr) * 2011-05-04 2012-11-07 STMicroelectronics (Rousset) SAS Protection d'une mémoire volatile contre des virus par changement d'instructions
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
FR2974919A1 (fr) * 2011-05-04 2012-11-09 St Microelectronics Rousset Protection d'une memoire 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
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
US10984097B2 (en) Methods and apparatus for control and detection of malicious content using a sandbox environment
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
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
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) ファイル変更マルウェア検出
US7702692B2 (en) Method and apparatus for preventing unauthorized access to computer system resources
US20120311713A1 (en) Detecting persistent vulnerabilities in web applications
KR20120114304A (ko) 동작 샌드박싱용 시스템 및 방법
US9621677B1 (en) Monitoring accesses to computer source code
Pouryousef et al. Let me join two worlds! analyzing the integration of web and native technologies in hybrid mobile apps
Abbadini et al. Lightweight cloud application sandboxing
US20170171224A1 (en) Method and System for Determining Initial Execution of an Attack
FR2859548A1 (fr) Procede de surveillance de l&#39;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
US9158558B1 (en) Methods and systems for providing application manifest information
Finnigan et al. Oracle Incident response and forensics
US12019734B2 (en) Methods and apparatus for control and detection of malicious content using a sandbox environment
KR20190020999A (ko) 악성프로그램 처리장치 및 처리방법

Legal Events

Date Code Title Description
ST Notification of lapse

Effective date: 20120531