| (In)security allgemein Sicherheit, Anonymität im Netz. Schutz und Maßnahmen. Prävention und Konzepte. Sicherheitsarchitekturen allgemein und auf der Netzwerkebene. |
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 ...
![]() |
| | #1 (permalink) |
| Guest Likes: | 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. |
|
| | #2 (permalink) |
| 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. | |
| | |
| HaBOT | |
| |
| | #3 (permalink) | ||
| Guest Likes: | Zitat:
Zitat:
Weitere Ideen, Verfeinerungen ? | ||
|
| | #4 (permalink) |
| 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. | |
| | |
| | #5 (permalink) | |
| Guest Likes: | Zitat:
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 ? | |
|
| | #6 (permalink) |
| Guest Likes: | 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;
}
} |
|
![]() |
| | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ä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 |