Connaître le process associé à un paquet ignoré sur Windows

J’ai cette semaine donné deux formations sur la sécurité informatique au Futuroscope de Poitiers. Et j’ai eu la drôle de surprise sur ma machine qui exécute une version d’évaluation de Windows Server 2016 de trouver les traces de bien drôles de requêtes. J’ai voulu en savoir plus.

Journaliser les paquets ignorés

 Afin de visualiser tous les paquets ignorés (DROP), vous devez lancer la console wf.msc. Dans les propriétés du pare-feu accessibles par un clic droit à la racine de la console, cliquez sur Personnaliser au niveau de Enregistrement. au niveau des trois onglets Profil de domaine, Profil privé et Profil public. wf.msc > Propriétés  > Profil > Enregistrement > Personnaliser  

 

Personnaliser les paramètres de journalisation du pare-feu Windows Par défaut, les logs du pare-feu Windows sont stockés dans le fichier %systemroot%\system32\LogFiles\Firewall\pfirewall.log. Il peut être intéressant d’indiquer un fichier différent pour chacun des trois profils.

Un extrait du journal

Ni le numéro de process, ni le nom du process n’apparaissent dans ce fichier !

2017-10-07 12:30:45 DROP TCP 192.168.1.100 131.253.61.82 57381 443 0 - 0 0 0 - - - SEND
2017-10-07 12:30:45 DROP TCP 192.168.1.100 131.253.61.102 57382 443 0 - 0 0 0 - - - SEND
2017-10-07 12:30:45 DROP TCP 192.168.1.100 131.253.61.100 57383 443 0 - 0 0 0 - - - SEND
2017-10-07 12:30:45 DROP TCP 192.168.1.100 131.253.61.80 57384 443 0 - 0 0 0 - - - SEND
2017-10-07 12:30:45 DROP TCP 192.168.1.100 131.253.61.66 57385 443 0 - 0 0 0 - - - SEND
2017-10-07 12:30:45 DROP TCP 192.168.1.100 131.253.61.70 57386 443 0 - 0 0 0 - - - SEND

Indétermination du process

Pour déterminer le process à l’origine de cette sortie de paquets, j’ai dû modifier,  à partir de la console gpedit.msc, la stratégie Auditer l’accès aux objets accessible à partir de Configuration de l’ordinateur > Paramètres Windows > Stratégies locales > Stratégies d’audit. comme suit :

gpedit.msc > Configuration de l'ordinateur > Paramètres Windows > Stratégies locales > Stratégies d'audit > Auditer l'accès aux objets

Il suffit ensuite d’aller dans le journal Sécurité de l’observateur d’événements Windows (eventvwr.msc ou eventvwr.exe).

Observateur d'événements > Journaux Windows > Sécurité

Un script PowerShell pour visualiser le process associé au paquet ignoré

Je vous recommande de nettoyer le journal d’événements Sécurité avant d’exécuter ce script PowerShell et d’attendre quelques secondes.

Clear
$res=@()
$events=Get-EventLog -LogName Security|Where {$_.InstanceId -in 5157,5158}|Select -Property TimeGenerated,Message,InstanceId
ForEach($event in $events)
{
    $date=$event.TimeGenerated
    $paquet=$event.InstanceId
    If($paquet -eq '5158')
    {
        $paquet='ALLOW'
    }
    ElseIf($paquet -eq '5157')
    {
        $paquet='DROP'
    }
    $rows=($event.Message -split '`n')
    ForEach($row in $rows)
    {
        If($row -match 'application.:.([\\a-z0-9\. \)\(]+)')
        {
            $app=$Matches[1]
        }
        If($row -match 'Direction[^:]+:[^%]+%%([0-9]+)')
        {
            $dir=$Matches[1]
            If($dir -eq '14592')
            {
                $dir='Entrant';
            }
            ElseIf($dir -eq '14593')
            {
                $dir='Sortant';
            }
        }
        If($row -match 'Adresse source[^:]+:[^a-f0-9:]+([a-f:\.0-9]+)')
        {
            $addrsrc=$Matches[1]
        }
        If($row -match 'Port source[^:]+:[^0-9]+([0-9]+)')
        {
            $portsrc=$Matches[1]
        }
        If($row -match 'Adresse de destination[^:]+:[^a-f0-9:]+([a-f:\.0-9]+)')
        {
            $addrdst=$Matches[1]
        }
        If($row -match 'Port de destination[^:]+:[^0-9]+([0-9]+)')
        {
            $portdst=$Matches[1]
        }    
        If($row -match 'Protocole[^:]+:[^0-9]+([0-9]+)')
        {
            $prot=$Matches[1]
        }
        <#
        If($prot -eq '6' -and ($portsrc -eq '443' -or $portdst -eq '443') -and $addrdst -eq '192.168.1.100')
        #>
        #{
            $res+=[PSCustomObject]@{date=$date;paquet=$paquet;app=$app;prot=$prot;dir=$dir;addrsrc=$addrsrc;portsrc=$portsrc;addrdst=$addrdst;portdst=$portdst}
        #}

    }
    $rows=$null
}
$events=$null
#$res|Out-GridView
#$res|Where {$_.paquet -eq 'DROP' -and $_.app -notmatch '^System$|svchost'}|Out-GridView
$res|Where {$_.paquet -eq 'DROP'}|Out-GridView
$res=$null
# Clear-EventLog vous permet de nettoyer votre journal d'événements
#Clear-EventLog -LogName Security

De bien drôles de paquets

Il s’agit d’un retour de paquets issus de la consultation d’un site à partir d’un port dynamique différent de celui par lequel le paquet d’origine est sorti. C’est assez incompréhensible et il faut que je creuse ! Je tiens tout de même à vous rassurer : ces paquets ont été bloqués par mes règles de pare-feu Windows, dans lequel nous pouvons préciser le process !

Script PowerShell permettant de visualiser les paquets ignorés

Peut-être, une explication…

Je pensais qu’il s’agissait d’un problème lié au mode multiprocess de Firefox. La sortie sur le Tcp/80 ou Tcp/443 se fait sur un port différent du fait qu’il n’utilise pas le même process à l’aller qu’au retour. En fait, c’est pas ça !

Sécurité  / Formateur Powershell Formateur Sécurité informatique Pare-feu Windows PowerShell Script PowerShell Sécurité informatique 

Commentaires

Pas encore de commentaire.

Laisser un commentaire

(requis)

(requis)