Hackerboard WikiHaboBlog

[HaBo]

 
(In)security allgemein Sicherheit, Anonymität im Netz. Schutz und Maßnahmen. Prävention und Konzepte. Sicherheitsarchitekturen allgemein und auf der Netzwerkebene.

Angriffsignaturen 2 - tcp-syn-portscan

Diskussion: Angriffsignaturen 2 - tcp-syn-portscan im Forum (In)security allgemein, in der Kategorie Security Area; Hallo liebe Freunde, mal angenommen Ihr seid ein Securitytool welches schon ewig denn Datenverkehr in einem LAN mitbekommt.Ihr arbeitet rein ...

Antwort
Alt 30.10.09, 19:41   #1 (permalink)
friday0D
Guest
 
Likes:
Standard Angriffsignaturen 2 - tcp-syn-portscan


Hallo liebe Freunde,

mal angenommen Ihr seid ein Securitytool welches schon ewig denn Datenverkehr in einem LAN mitbekommt.Ihr arbeitet rein passiv. Ihr könnte euch alles merken, was den Datenverkehr betrifft, was Ihr wollt. Z.B. seid Ihr angeschlossen an einen mirrorport des LAN-Switches, der den gesamten Datenverkehr des Netzwerksegmentes auf euch spiegelt.

Wie stellt Ihr einen synbasierten tcp portscan eines ungebetenen Gastes fest ?
Bitte keine Tools nennen sondern Merkmale an Paketen, Beziehungen.

Vorbedingung:
Der Switch bietet keine Sicherheitsmerkmale im Bereich Layer 2 und 3 an. Es gibt keine firewall, d.h. jeder von ausßen kann Pakete in euer LAN schicken, der router benutzt nicht nat, sondern läßt alle Anfragen in das LAN unmittelbar an den Empfänger adressiert hinein.

  Mit Zitat antworten
Alt 31.10.09, 11:21   #2 (permalink)
 
Benutzerbild von Ancient
 
Registriert seit: 15.08.05
Ancient Leistung: Facit NTK
Ancient eine Nachricht über ICQ schicken Ancient eine Nachricht über MSN schicken Ancient eine Nachricht über Skype™ schicken
Likes: 0
Standard

Pro src/dst eine Tabelle mit den Ports die in den letzten x sekunden angesprochen wurden wenn ports ueber einer gewissen threshold dann moeglicherweise portscan.

Andere Moeglichkeit du sagt dem Prog welche ports offen sind und jeder connect versuch auf einen port der nicht offen sein soll ist suspicious.
Ancient ist offline   Mit Zitat antworten
   
HaBOT
 

Werbung ist gerade online    
Alt 01.11.09, 19:34   #3 (permalink)
friday0D
Guest
 
Likes:
Standard

Zitat:
Original von Ancient
Pro src/dst eine Tabelle mit den Ports die in den letzten x sekunden angesprochen wurden wenn ports ueber einer gewissen threshold dann moeglicherweise portscan.
hast Dich ja sehr knapp gehalten Um den Hintergrund Deines Ansatzes etwas zu beleuchten hole ich dann wohl mal ein bischen aus, wenn ich Dich fehlinterpretiere, sag bescheid.




Zitat:
Original von Ancient
Andere Moeglichkeit du sagt dem Prog welche ports offen sind und jeder connect versuch auf einen port der nicht offen sein soll ist suspicious.
Leider gibt es Anwendungen, die dynamisch ports anbieten, siehe remoting. Hier hätten wir mit einer vordefinierten Portangabe Probleme.

Weitere Ideen, Verfeinerungen ?
  Mit Zitat antworten
Alt 01.11.09, 22:57   #4 (permalink)
 
Benutzerbild von Ancient
 
Registriert seit: 15.08.05
Ancient Leistung: Facit NTK
Ancient eine Nachricht über ICQ schicken Ancient eine Nachricht über MSN schicken Ancient eine Nachricht über Skype™ schicken
Likes: 0
Standard

Ja die basis des TCP habe ich mal vorausgesetzt.

ad genauer wenn das alle machen ist es ja egal wenns der selbe port ist es geht darum die connection (atempts) / source <-> dst pair zu loggen und wenn eine source weis nicht sagen wir mal 50 verschiedene ports hat dann ist da ml sehr verdaechtig.
Ancient ist offline   Mit Zitat antworten
Alt 02.11.09, 18:18   #5 (permalink)
friday0D
Guest
 
Likes:
Standard

Zitat:
Original von Ancient
Ja die basis des TCP habe ich mal vorausgesetzt.

ad genauer wenn das alle machen ist es ja egal wenns der selbe port ist es geht darum die connection (atempts) / source <-> dst pair zu loggen und wenn eine source weis nicht sagen wir mal 50 verschiedene ports hat dann ist da ml sehr verdaechtig.
Hallo nochmal Ancient,

also ich denke Du gehst mit mir konform, wenn ich sage, dass ein tcp portscan grundsätzlich daran zu erkennen ist, dass ein hoher Prozentsatz der Anfragen mit keinen syn,ack beantwortet werden, d.h. die wenigen Treffer eines scans können wir nicht als Maßstab nehmen.

Wenn ein Synpaket kommt erstellen wir einen attempt record. Wenn ein synack zu diesem kommt löschen wir den record. Wenn die Anzahl records pro sourceip einen Anzahl/Zeit Schwellwert überschreitet haben wir definitiv einen portscan festgestellt.

Auf der anderen Seite können wir hier noch mehr feststellen, wenn wir die Anzahl empfangener synpakete/Zeit auf der zielip-seite erheben, und die Datensätze ausradieren wenn das Ziel mit einem synack antwortet und darauf ein ack, als Ende des 3way-handshake kommt. Wenn wir das tun haben wir an dieser Stelle die Signatur tcp-syn based Denial of Service festgestellt, distributed oder von einer Quelle ausgehend!
Oder ..? soweit i.o.

Anregungen Meinungen Kritik ?
  Mit Zitat antworten
Alt 04.11.09, 18:57   #6 (permalink)
friday0D
Guest
 
Likes:
Standard

Hallo,

dank der netten Anzeigen habe ich die Chance auf meinen eigenen Beitrag zu antworten

Code:
class pvampTCPInspector
    {
        pvampDB DB;
        Hashtable Connections_SynSent = new Hashtable();
        Hashtable Connections_All = new Hashtable();
        Hashtable SynFromSource = new Hashtable();
        int min_time_for_syncheck = 5;
        int max_syn_for_source = 5;
        DateTime LastSynCheck = DateTime.Parse("01.01.1900");

        public pvampTCPInspector(pvampDB pDB)
        {
            DB = pDB;
        }
        public void putPacket(TCPPacket  P)
        {
            TimeSpan TimeBetweenLastSynCheck = DateTime.Now - LastSynCheck;
            if (TimeBetweenLastSynCheck.TotalSeconds > min_time_for_syncheck)
            {
                // it's time for a check for half open connections
                // for each recognized syn sender do so
                foreach (DictionaryEntry DE in SynFromSource)
                {
                    int syncount = 0;
                    // for each target connection of the syn sender do
                    foreach (DictionaryEntry SubDE in (Hashtable)DE.Value)
                    {
                        // get the associated connection and count new entries since last check
                        TCPConnection ThisConnection = (TCPConnection)SubDE.Value;
                        TimeSpan connection_alive_since_sec = 
                            DateTime.Now - ThisConnection.Created;
                        if (connection_alive_since_sec <= TimeBetweenLastSynCheck)
                        {
                            syncount++;
                        }
                    }  
                    if (syncount > max_syn_for_source)
                    {
                        Console.WriteLine("handle: tcp: tcp-syn-portscan possible");
                    }
                }
            }

            TCPConnection Connection = GetTCPConnection(P);
            if (Connection == null)
            {
                // this TCP Connection isn't present
                if (P.Syn && !P.Ack)
                {
                    // this may be a normal connection attempt
                    // Create the Connection object and link it from connections_all
                    // and connection_SynSent, synfromsource association
                    
                    string PK = Helper.TCP_ConnectionPK(P);
                    Connections_All[PK] = new TCPConnection(
                        P.SourceAddress.ToString(), P.DestinationAddress.ToString(),
                        P.SourcePort, P.DestinationPort,P.SequenceNumber );
                    Connections_SynSent[PK] = (TCPConnection)Connections_All[PK];
                    Console.WriteLine("handle: tcp: syn for connection " + PK);

                    // Create a syn table, 
                    // if acual source protoadress has not accured yet in this context
                    if (SynFromSource[P.SourceAddress.ToString()] == null)
                        SynFromSource[P.SourceAddress.ToString()] = new Hashtable();
                    // Subdevide structure to SourceIP in toplevel and the target parameters in sublevel
                    Hashtable SubEntries = (Hashtable)SynFromSource[P.SourceAddress.ToString()];
                    string SubPK = string.Format("{0}|{1}",
                        P.DestinationAddress.ToString(),
                        P.DestinationPort .ToString());
                    SubEntries[SubPK] = (TCPConnection)Connections_All[PK];
                }
                else
                {
                    // this connection may be alive since a time before pvamp started
                }
            }
            else
            {
                TCPConnectionState ChangeEvent= Connection.putPacket(P);
                // When receiving a synack or rst, the syn entries should be erased
                if (ChangeEvent == TCPConnectionState.SynAckReceived
                    | ChangeEvent == TCPConnectionState.RstReceived  )
                {
                    SynFromSource.Remove(Connection.SourceIP );
                    Console.WriteLine("handle: tcp: removed " + 
                        Connection.SourceIP  + " from syncheck table");
                }
            }
            
        }

        TCPConnection GetTCPConnection(TCPPacket P)
        {
            if (Connections_All[P.SourceAddress.ToString() + "|"
                + P.SourcePort.ToString() + "|"
                + P.DestinationAddress.ToString() + "|"
                + P.DestinationPort.ToString()] != null)
            {
                return (TCPConnection)Connections_All[
                    P.SourceAddress.ToString() + "|" + P.SourcePort.ToString() + "|" + 

P.DestinationAddress.ToString() + "|" + P.DestinationPort.ToString()];
            }
            else if (Connections_All[P.DestinationAddress.ToString() + "|"
                + P.DestinationPort.ToString() + "|"
                + P.SourceAddress.ToString() + "|"
                + P.SourcePort.ToString()] != null)
            {
                return (TCPConnection)Connections_All[
                    P.DestinationAddress.ToString() + "|" + P.DestinationPort.ToString() + "|" + 

P.SourceAddress.ToString() + "|" + P.SourcePort.ToString()];
            }
            else
                return null;
        }
    }
  Mit Zitat antworten
Antwort
   

Werbung ist gerade online    

[HaBo] » Security Area » (In)security allgemein » Angriffsignaturen 2 - tcp-syn-portscan
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
"Portscan" per udp Haldir Network · LAN, WAN, Firewalls 10 13.04.09 11:28
portscan mit php matrixII (Web-) Design und webbasierte Sprachen 2 31.01.04 22:47
Portscan... lutz280681 (In)security allgemein 9 22.10.03 14:31
Portscan Prob. Gizmo (In)security allgemein 14 20.01.03 15:35


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61