Categories
Network

Haka

Haka est un langage permettant d’analyser les paquets réseau (donc couche 3 du modèle OSI) basé sur Lua. Il est possible de l’utiliser pour ce que vous faisiez déjà avec Scapy.

Pour faire bref, voici un exemple assez simple provenant du site de Haka:

------------------------------------
-- Loading dissectors
------------------------------------
 
-- Load the ipv4 dissector to filter on IPV4 fields
local ipv4 = require('protocol/ipv4')
 
------------------------------------
-- Detects packets originating from 192.168.10.10
--   * Log an alert
--   * Drop the packet
------------------------------------
haka.rule{
  -- This rule is applied on each IP incoming packet
  hooks = { 'ipv4-up' },
  eval = function (self, pkt)
    -- Parse the IP address and assign it to a variable
    local bad_ip = ipv4.addr('192.168.10.10')
    if pkt.src == bad_ip then
      -- Log an alert
      haka.alert{
        description = string.format("Filtering IP %s", bad_ip),
        severity = 'low'
      }
      -- and drop the packet
      pkt:drop()
    end
    -- All other packets will be accepted
  end
}

Le principe est simple. Dans notre exemple nous avons une règle définie par:

  • un événement. Un hook, ici l’événement «paquet IP entrant»;
  • une fonction appelée lorsque l’événement est réalisé.

Ici lorsque la source du paquet est “192.168.10.10” le paquet est rejeté (pkt:drop()) et un message est envoyé dans les logs.

Il est possible de faire des choses bien plus intéressantes, comme modifier les paquets entrants et/ou sortants, modifier les headers HTTP, etc.

Encore un outil sympa et puissant pour analyser les paquets réseau. Finalement, je préfère même ça à iptables ou nftables.