GEOINT : Comment utiliser Overpass Turbo pour l’OSINT
Overpass Turbo (OPT) permet de rechercher des informations cartographiées dans la base de données d’Open Street Map grâce à des requêtes en lignes de commande ainsi c’est un outil de géolocalisation hors-pair. Vous pouvez par exemple y trouver la liste de tous les numéro 42 existant dans une ville, les pharmacies situées à proximité d’une ligne de tram ou encore toutes les routes limitées à 30 d’une région. Mais la prise en main d’Overpass Turbo peut s’avérer difficile, c’est pourquoi cet article présente comment construire des requêtes simples afin de rendre cet outil accessible à tous.
Avant de présenter Overpass Turbo, parlons en quelques mots d’ Open Street Map (OSM). OSM est un projet de cartographie collaborative existant depuis une vingtaine d’années qui fournit et maintient des milliers de données sur les routes, bâtiments, et toutes sortes d’infrastructures partout dans le monde. Overpass Turbo est un outil qui permet d’émettre des requêtes à l’API d’OSM et d’en visualiser les résultats sur une carte intéractive.
Sommaire
- I/ Première requête sur Overpass Turbo
- II/ Effectuer des recherches composées
- III/ Exploiter Overpass Turbo pour la GEOINT
I/ Première requête sur Overpass Turbo
Commençons en recherchant des musées parisiens grâce à l’assistant d’OVP. Une fois sur l’assistant, nous copions simplement un des modèles proposés.
Une requête en Overpass Qwery Language apparaît sur la partie gauche de la fenêtre. Nous allons détailler ensemble les différents éléments de cette requête :
L’emprise est la zone géographique dans laquelle la requête va être émise. Par défaut, elle est définie par ({{bbox}}), ce qui désigne la zone de la carte visible dans la partie droite de la fenêtre, mais elle peut être modifiée à loisir.
Parler de types sur OPT revient à s’intéresser à la manière dont les données d’OSM sont désignées:
- La brique fondamentale d’OSM est le nœud (node), qui est un point défini résultant de la combinaison d’une latitude et d’une longitude.
- Une voie (way) est l’interconnexion d’au moins deux nœuds et peut donc prendre la forme d’un chemin ouvert, d’un chemin fermé ou d’une surface.
- Une relation (rel) est le regroupement de plusieurs nœuds, voies ou relations qui forment un tout cohérent.
Pour prendre un exemple simple : un ralentisseur est un point, une route est une voie et une ville est une relation. Dans le cadre de notre requête le type a par défaut été défini sur nwr pour node/way/relation ce qui revient à rechercher l’intégralité des résultats pour les trois types.
À chaque type sont associés un ou plusieurs tags. Ceux-ci prennent la forme [“clé”=”valeur”]. Le catalogue des différents tags utilisés par OSM peut être consulté sur TagInf ou sur le wiki d’OSM, bien les connaître permet de préciser les requêtes formulées. Dans notre exemple, le tag associe la clé tourism à la valeur museum.
Ces trois éléments forment une instruction de recueil de données qui s’achève par un point virgule. La sortie quant à elle permet l’affichage des résultats et s’achève elle aussi par un point virgule.
Ces quelques éléments ayant été éclaircis, voyons comment les exploiter en pratique.
II/ Effectuer des recherches composées
Association de tags :
Associer plusieurs tags permet d’affiner les résultats des requêtes. Cherchons par exemple des musées disposant d’un accès complet pour les personnes en fauteuils roulants. Il nous suffit d’ajouter à notre requête initiale le tag [“wheelchair”=”yes”].
Utilisation des géocodes :
Comme nous l’avons vu plus haut, une recherche sera effectuée par défaut dans la zone visible de la carte interactive d’OPT (({{bbox}})), mais il est possible de chercher directement dans la zone qui nous intéresse en rédigeant notre requête. Cette fonction permet notamment d’avoir une requête à la fois plus précise mais également plus modulable. Cherchons les musées disposant d’un accès pour les personnes en fauteuil roulant dans la ville de Paris. Pour cela nous créons un set nommé searchArea correspondant à la ville de Paris et nous remplaçons notre emprise par l’expression (area.searchArea).
Si nous devions à l’avenir faire une recherche similaire pour la ville de Londres, nous n’aurions dès lors qu’un terme à modifier.
La fonction Around :
La fonction Around permet d’effectuer une recherche dans un rayon géographique donné. Pour poursuivre avec notre exemple illustratif, cherchons maintenant un parking à proximité de nos musées. Nous créons tout d’abord un nouveau set nommé musees (OPT n’accepte pas les accents) qui va conserver les données de la requête de musées et ajoutons une seconde requête de parkings dans les zones géographiques situées dans un rayon de 50 mètres aux alentours des musées. Il nous sera dès lors possible de moduler facilement le rayon de recherche ou de chercher d’autres lieux à proximité des musées rapidement.
Ajout de conditions :
Il est tout à fait possible d’ajouter des conditions variées à nos requêtes telles que la longueur d’une route, la hauteur d’un bâtiment, ou l’adéquation de la clé et d’une valeur d’un tag. Cherchons par exemple à ne conserver que les parkings souterrains. Pour ce faire, nous allons vérifier la correspondance de la clé parking avec la valeur underground.
Croiser ces différentes fonctions permet d’aboutir à des résultats de plus en plus fins et détaillés.
Une fois vos résultats atteints, Overpass Turbo offre la possibilité de les exporter ainsi que la requête ou la carte sous différents formats. Cette fonctionnalité est particulièrement intéressante pour les intégrer à des services de cartographie externes (ex. Google Earth).
III/ Exploiter Overpass Turbo pour la GEOINT
Nous allons voir dans la suite de cet article comment Overpass Turbo peut-être utilisé pour la GEOINT en nous appuyant sur un challenge proposé par Sophia Santos/@Gralhix. Son challenge est composé de deux parties et nous nous concentrerons ici sur la seconde question:
Le challenge est accompagné d’une vidéo YouTube où l’on voit une ville sujette à un tremblement de terre. Tâchons de localiser le lieu de prise de vue.
Le site GeoSpy permet d’estimer la localisation d’un lieu à partir d’une simple image, il n’est pas toujours correct mais il peut nous lancer sur la bonne voie. En passant notre capture de la vidéo au crible, GeoSpy nous suggère une prise de vue à Chișinău en Moldavie aux coordonnées 47.02525433026067, 28.84282880435812. Malheureusement, ces coordonnées ne correspondent pas à la vue de la caméra aussi nous retournons aux éléments dont nous disposons.
Une recherche Google au sujet de tremblements de terre survenus le 24 septembre 2016 nous permet de confirmer que l’estimation fournie par GeoSpy est cohérente puisqu’un tel événement a été enregistré à cette date en Roumanie et en Moldavie. Nous pouvons donc concentrer nos recherches sur Chișinău.
Prenons maintenant le temps de relever les éléments remarquables visibles sur l’image. Nous voyons en fond un grand bâtiment blanc qui semble haut de 12 étages (en orange sur l’image). À proximité de celui-ci nous pouvons observer un espace de stationnement pour les voitures (en bleu) ainsi qu’une route à 6 voies (en rouge).
Tentons maintenant de soumettre une requête OPT qui satisferait tous ces éléments. La requête suivante recherche tous les immeubles de 12 étages de Chișinău situés à 30 mètres ou moins des parkings qui sont à 50 mètres ou moins de routes à 6 voies :
Notre requête renvoie deux résultats situés par chance à proximité situés aux coordonnées 47.0153294 / 28.8551636 et 47.0152839 / 28.8545461.
Nous pouvons désormais tenter de confirmer sur Google Earth si ces coordonnées correspondent à la vue de la caméra du challenge en recoupant les éléments notables relevés plus tôt :
Dès lors, il ne nous reste qu’à déterminer le point précis depuis lequel la vidéo a été filmée. Une observation rapide des bâtiments environnants nous permet d’affirmer que seuls les étages supérieurs ou le toit de l’angle est du V-Continental Business Center offrent un point d’observation similaire à celui de la vidéo.
La vidéo a donc été prise aux coordonnées 47°01'03.0"N 28°51'10.1"E.
Nous l’avons vu tout au long de cet article, OPT est un formidable outil pour la recherche et l’exploration de données cartographiques dans le monde entier, mais son accessibilité reste limitée par la difficulté de formulation de ses requêtes et les connaissances nécessaires à son utilisation. Cet article a pour but de pallier ce problème en fournissant un tutoriel simple mais complet et actionnable.
Si vous êtes arrivés jusqu’ici vous êtes sans doute de fervents adeptes de l’OSINT et Predicta Lab a pour mission de vous faciliter la vie en développant des outils d’automatisation de la recherche. À ce titre nous sommes curieux de votre utilisation d’Overpass Turbo : est-ce un outil que vous utilisez déjà ? Si oui à quelle fréquence et dans quel but ? Et que pensez-vous des outils de création de requête OverPass Turbo existants (celui de Bellingcat ou ChatGPT par exemple) ? Nous sommes à votre écoute en commentaire Medium, sur Twitter et sur LinkedIn pour échanger à ce sujet !
Ressources:
Overpass API/Language Guide — OpenStreetMap Wiki
Overpass turbo/Extended Overpass Turbo Queries — OpenStreetMap Wiki
Nixintel Open Source Intelligence & Investigations Getting Started With Overpass Turbo — Part 1
Croiser des données sur OpenStreetMap avec Overpass-Turbo | OpenFacto
datadesk/overpass-turbo-tutorial: Code examples and tutorial on getting data out of OpenStreetMap
Intro to Overpass Turbo GUI and Google Earth for OSINT — YouTube