Cisco IOS
Overview
Cisco IOS is a network operating system for Cisco ASR routers and Cisco Catalyst switches.
- Vendor: Cisco
- Supported environment: On Premise
- Version compatibility: 15.5 (Latest version as of now)
- Detection based on: Telemetry
- Supported application or feature: Network management and operation
High-Level Architecture Diagram
- Type of integration: Outbound (PUSH to Sekoia.io)
- Schema
Specification
Prerequisites
- Resource:
- Self-managed syslog forwarder
- Network:
- Outbound traffic allowed
- Permissions:
- Administrator or Root access to the Cisco IOS device
- Root access to the Linux server with the syslog forwarder
Transport Protocol/Method
- Indirect Syslog
Logs details
- Supported functionalities: See section Overview
- Supported type(s) of structure: Plain text
- Supported verbosity level: Informational
Note
Log levels are based on the taxonomy of RFC5424. Adapt according to the terminology used by the editor.
Step-by-Step Configuration Procedure
Instructions on the 3rd Party Solution
Forward Cisco IOS Logs to Sekoia.io
This setup guide will show you how to provide an integration between Cisco IOS events and Sekoia.io.
Enable Syslog Forwarding: - Log on your Cisco appliance. - Follow this guide to enable syslog forwarding to a managed syslog forwarder.
Instruction on Sekoia
Configure Your Intake
This section will guide you through creating the intake object in Sekoia, which provides a unique identifier called the "Intake key." The Intake key is essential for later configuration, as it references the Community, Entity, and Parser (Intake Format) used when receiving raw events on Sekoia.
- Go to the Sekoia Intake page.
- Click on the
+ New Intake
button at the top right of the page. - Search for your Intake by the product name in the search bar.
- Give it a Name and associate it with an Entity (and a Community if using multi-tenant mode).
- Click on
Create
.
Note
For more details on how to use the Intake page and to find the Intake key you just created, refer to this documentation.
Configure a forwarder
To forward events using syslog to Sekoia.io, you need to update the syslog header with the intake key you previously created. Here is an example of your message before the forwarder
<%pri%>1 %timestamp:::date-rfc3339% %hostname% %app-name% %procid% LOG RAW_MESSAGE
<%pri%>1 %timestamp:::date-rfc3339% %hostname% %app-name% %procid% LOG [SEKOIA@53288 intake_key=\"YOUR_INTAKE_KEY\"] RAW_MESSAGE
To achieve this you can:
- Use the Sekoia.io forwarder which is the official supported way to collect data using the syslog protocol in Sekoia.io. In charge of centralizing data coming from many equipments/sources and forwarding them to Sekoia.io with the apporpriated format, it is a prepackaged option. You only have to provide your intake key as parameter.
- Use your own Syslog service instance. Maybe you already have an intance of one of these components on your side and want to reuse it in order to centralize data before forwarding them to Sekoia.io. When using this mode, you have to configure and maintain your component in order to respect the expected Sekoia.io format.
Warning
Only the Sekoia.io forwarder is officially supported. Other options are documented for reference purposes but do not have official support.
Raw Events Samples
In this section, you will find examples of raw logs as generated natively by the source. These examples are provided to help integrators understand the data format before ingestion into Sekoia.io. It is crucial for setting up the correct parsing stages and ensuring that all relevant information is captured.
FE03.LOCAL: Mar 6 2023 08:04:45.866 CET: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet1/0/13, changed state to down
STN01.LOCAL: Mar 6 2023 08:04:45.866 CET: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet1/0/13, changed state to up
FE05: Mar 6 2023 08:04:45.866: %LINK-3-UPDOWN: Interface GigabitEthernet2/0/13, changed state to down
Jul 3 2024 16:39:13 CEST: %LINK-3-UPDOWN: Interface GigabitEthernet2/0/14, changed state to down
FE05: Mar 6 2023 08:04:45.866: %LINK-3-UPDOWN: Interface GigabitEthernet2/0/25, changed state to up
FE08: Jan 13 2023 10:16:05.33: %SEC_LOGIN-5-LOGIN_SUCCESS: Login Success [user: jdoe] [Source: 1.2.3.4] [localport: 22] at 10:16:05 GMT Fri Jan 13 2023
FE08: Jan 13 2023 10:16:05.33: %SYS-3-LOGGINGHOST_FAIL: Logging to host 3.2.4.5 port 514 failed
FE08: Jan 13 2023 10:16:05.33: %SYS-6-LOGOUT: User jdoe has exited tty session 2(1.2.3.4)
Jul 3 2024 16:40:48: %MAB-5-FAIL: Authentication failed for client (0000.0000.0000) on Interface Gi2/0/7 AuditSessionID 0000000D0000000000000000
DN04.LOCAL: Feb 21 06:59:55.692: %SW_MATM-4-MACFLAP_NOTIF: Host 0011.2233.4455 in vlan 20 is flapping between port Gi1/0/9 and port Gi2/0/9
FE08: Jan 13 2023 10:16:05.33: %SYS-6-TTY_EXPIRE_TIMER: (exec timer expired, tty 2 (1.2.3.4)), user jdoe
Detection section
The following section provides information for those who wish to learn more about the detection capabilities enabled by collecting this intake. It includes details about the built-in rule catalog, event categories, and ECS fields extracted from raw events. This is essential for users aiming to create custom detection rules, perform hunting activities, or pivot in the events page.
Related Built-in Rules
The following Sekoia.io built-in rules match the intake Cisco IOS router and switch. This documentation is updated automatically and is based solely on the fields used by the intake which are checked against our rules. This means that some rules will be listed but might not be relevant with the intake.
SEKOIA.IO x Cisco IOS router and switch on ATT&CK Navigator
Account Added To A Security Enabled Group
Detection in order to investigate who has added a specific Domain User in Domain Admins or Group Policy Creator Owners (Security event 4728)
- Effort: master
Account Removed From A Security Enabled Group
Detection in order to investigate who has removed a specific Domain User in Domain Admins or Group Policy Creator Owners (Security event 4729)
- Effort: master
Computer Account Deleted
Detects computer account deletion.
- Effort: master
Cryptomining
Detection of domain names potentially related to cryptomining activities.
- Effort: master
Domain Trust Created Or Removed
A trust was created or removed to a domain. An attacker could perform that in order to do lateral movement easily between domains or shutdown the ability of two domains to communicate.
- Effort: advanced
Dynamic DNS Contacted
Detect communication with dynamic dns domain. This kind of domain is often used by attackers. This rule can trigger false positive in non-controlled environment because dynamic dns is not always malicious.
- Effort: master
Exfiltration Domain
Detects traffic toward a domain flagged as a possible exfiltration vector.
- Effort: master
Password Change On Directory Service Restore Mode (DSRM) Account
The Directory Service Restore Mode (DSRM) account is a local administrator account on Domain Controllers. Attackers may change the password to gain persistence.
- Effort: intermediate
Possible Replay Attack
This event can be a sign of Kerberos replay attack or, among other things, network device configuration or routing problems.
- Effort: intermediate
RSA SecurID Failed Authentification
Detects many failed attempts to authenticate followed by a successfull login for a super admin account.
- Effort: advanced
Remote Access Tool Domain
Detects traffic toward a domain flagged as a Remote Administration Tool (RAT).
- Effort: master
SEKOIA.IO Intelligence Feed
Detect threats based on indicators of compromise (IOCs) collected by SEKOIA's Threat and Detection Research team.
- Effort: elementary
Sekoia.io EICAR Detection
Detects observables in Sekoia.io CTI tagged as EICAR, which are fake samples meant to test detection.
- Effort: master
TOR Usage Generic Rule
Detects TOR usage globally, whether the IP is a destination or source. TOR is short for The Onion Router, and it gets its name from how it works. TOR intercepts the network traffic from one or more apps on user’s computer, usually the user web browser, and shuffles it through a number of randomly-chosen computers before passing it on to its destination. This disguises user location, and makes it harder for servers to pick him/her out on repeat visits, or to tie together separate visits to different sites, this making tracking and surveillance more difficult. Before a network packet starts its journey, user’s computer chooses a random list of relays and repeatedly encrypts the data in multiple layers, like an onion. Each relay knows only enough to strip off the outermost layer of encryption, before passing what’s left on to the next relay in the list.
- Effort: master
User Account Created
Detects user creation on windows servers, which shouldn't happen in an Active Directory environment. Apply this on your windows server logs and not on your DC logs. One default account defaultuser0
is excluded as only used during Windows set-up. This detection use Security Event ID 4720.
- Effort: master
User Account Deleted
Detects local user deletion
- Effort: master
Event Categories
The following table lists the data source offered by this integration.
Data Source | Description |
---|---|
Host network interface |
every packets are logged and information on the outcome, the source/destination are extracted |
Network device logs |
ACL logs are examined in detail |
Network protocol analysis |
packets are fully analyzed |
In details, the following table denotes the type of events produced by this integration.
Name | Values |
---|---|
Kind | `` |
Category | host |
Type | `` |
Transformed Events Samples after Ingestion
This section demonstrates how the raw logs will be transformed by our parsers. It shows the extracted fields that will be available for use in the built-in detection rules and hunting activities in the events page. Understanding these transformations is essential for analysts to create effective detection mechanisms with custom detection rules and to leverage the full potential of the collected data.
{
"message": "FE03.LOCAL: Mar 6 2023 08:04:45.866 CET: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet1/0/13, changed state to down",
"event": {
"action": "down",
"category": [
"host"
],
"code": "UPDOWN",
"reason": "Line protocol on Interface GigabitEthernet1/0/13, changed state to down",
"severity": 5,
"type": [
"info"
]
},
"@timestamp": "2023-03-06T07:04:45.866000Z",
"cisco": {
"ios": {
"event": {
"facility": "LINEPROTO"
},
"observer": {
"interface": {
"name": "GigabitEthernet1/0/13"
}
}
}
},
"host": {
"name": "FE03.LOCAL"
},
"observer": {
"product": "ios",
"vendor": "Cisco"
}
}
{
"message": "STN01.LOCAL: Mar 6 2023 08:04:45.866 CET: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet1/0/13, changed state to up",
"event": {
"action": "up",
"category": [
"host"
],
"code": "UPDOWN",
"reason": "Line protocol on Interface GigabitEthernet1/0/13, changed state to up",
"severity": 5,
"type": [
"info"
]
},
"@timestamp": "2023-03-06T07:04:45.866000Z",
"cisco": {
"ios": {
"event": {
"facility": "LINEPROTO"
},
"observer": {
"interface": {
"name": "GigabitEthernet1/0/13"
}
}
}
},
"host": {
"name": "STN01.LOCAL"
},
"observer": {
"product": "ios",
"vendor": "Cisco"
}
}
{
"message": "FE05: Mar 6 2023 08:04:45.866: %LINK-3-UPDOWN: Interface GigabitEthernet2/0/13, changed state to down",
"event": {
"action": "down",
"category": [
"host"
],
"code": "UPDOWN",
"reason": "Interface GigabitEthernet2/0/13, changed state to down",
"severity": 3,
"type": [
"info"
]
},
"@timestamp": "2023-03-06T08:04:45.866000Z",
"cisco": {
"ios": {
"event": {
"facility": "LINK"
},
"observer": {
"interface": {
"name": "GigabitEthernet2/0/13"
}
}
}
},
"host": {
"name": "FE05"
},
"observer": {
"product": "ios",
"vendor": "Cisco"
}
}
{
"message": "Jul 3 2024 16:39:13 CEST: %LINK-3-UPDOWN: Interface GigabitEthernet2/0/14, changed state to down",
"event": {
"action": "down",
"category": [
"host"
],
"code": "UPDOWN",
"reason": "Interface GigabitEthernet2/0/14, changed state to down",
"severity": 3,
"type": [
"info"
]
},
"@timestamp": "2024-07-03T14:39:13Z",
"cisco": {
"ios": {
"event": {
"facility": "LINK"
},
"observer": {
"interface": {
"name": "GigabitEthernet2/0/14"
}
}
}
},
"observer": {
"product": "ios",
"vendor": "Cisco"
}
}
{
"message": "FE05: Mar 6 2023 08:04:45.866: %LINK-3-UPDOWN: Interface GigabitEthernet2/0/25, changed state to up",
"event": {
"action": "up",
"category": [
"host"
],
"code": "UPDOWN",
"reason": "Interface GigabitEthernet2/0/25, changed state to up",
"severity": 3,
"type": [
"info"
]
},
"@timestamp": "2023-03-06T08:04:45.866000Z",
"cisco": {
"ios": {
"event": {
"facility": "LINK"
},
"observer": {
"interface": {
"name": "GigabitEthernet2/0/25"
}
}
}
},
"host": {
"name": "FE05"
},
"observer": {
"product": "ios",
"vendor": "Cisco"
}
}
{
"message": "FE08: Jan 13 2023 10:16:05.33: %SEC_LOGIN-5-LOGIN_SUCCESS: Login Success [user: jdoe] [Source: 1.2.3.4] [localport: 22] at 10:16:05 GMT Fri Jan 13 2023",
"event": {
"category": [
"host"
],
"code": "LOGIN_SUCCESS",
"reason": "Login Success [user: jdoe] [Source: 1.2.3.4] [localport: 22] at 10:16:05 GMT Fri Jan 13 2023",
"severity": 5,
"type": [
"access",
"start"
]
},
"@timestamp": "2023-01-13T10:16:05.330000Z",
"cisco": {
"ios": {
"event": {
"facility": "SEC_LOGIN"
}
}
},
"host": {
"name": "FE08"
},
"observer": {
"product": "ios",
"vendor": "Cisco"
},
"related": {
"ip": [
"1.2.3.4"
],
"user": [
"jdoe"
]
},
"source": {
"address": "1.2.3.4",
"ip": "1.2.3.4",
"port": 22
},
"user": {
"name": "jdoe"
}
}
{
"message": "FE08: Jan 13 2023 10:16:05.33: %SYS-3-LOGGINGHOST_FAIL: Logging to host 3.2.4.5 port 514 failed",
"event": {
"category": [
"host"
],
"code": "LOGGINGHOST_FAIL",
"reason": "Logging to host 3.2.4.5 port 514 failed",
"severity": 3,
"type": [
"access",
"end"
]
},
"@timestamp": "2023-01-13T10:16:05.330000Z",
"cisco": {
"ios": {
"event": {
"facility": "SYS"
}
}
},
"destination": {
"address": "3.2.4.5",
"ip": "3.2.4.5",
"port": 514
},
"host": {
"name": "FE08"
},
"observer": {
"product": "ios",
"vendor": "Cisco"
},
"related": {
"ip": [
"3.2.4.5"
]
}
}
{
"message": "FE08: Jan 13 2023 10:16:05.33: %SYS-6-LOGOUT: User jdoe has exited tty session 2(1.2.3.4)",
"event": {
"category": [
"host"
],
"code": "LOGOUT",
"reason": "User jdoe has exited tty session 2(1.2.3.4)",
"severity": 6,
"type": [
"access",
"end"
]
},
"@timestamp": "2023-01-13T10:16:05.330000Z",
"cisco": {
"ios": {
"event": {
"facility": "SYS"
},
"observer": {
"terminal": "2"
}
}
},
"host": {
"name": "FE08"
},
"observer": {
"product": "ios",
"vendor": "Cisco"
},
"related": {
"ip": [
"1.2.3.4"
],
"user": [
"jdoe"
]
},
"source": {
"address": "1.2.3.4",
"ip": "1.2.3.4"
},
"user": {
"name": "jdoe"
}
}
{
"message": "Jul 3 2024 16:40:48: %MAB-5-FAIL: Authentication failed for client (0000.0000.0000) on Interface Gi2/0/7 AuditSessionID 0000000D0000000000000000",
"event": {
"category": [
"host"
],
"code": "FAIL",
"reason": "Authentication failed for client (0000.0000.0000) on Interface Gi2/0/7 AuditSessionID 0000000D0000000000000000",
"severity": 5,
"type": [
"info"
]
},
"@timestamp": "2024-07-03T16:40:48Z",
"cisco": {
"ios": {
"event": {
"facility": "MAB"
}
}
},
"observer": {
"product": "ios",
"vendor": "Cisco"
}
}
{
"message": "DN04.LOCAL: Feb 21 06:59:55.692: %SW_MATM-4-MACFLAP_NOTIF: Host 0011.2233.4455 in vlan 20 is flapping between port Gi1/0/9 and port Gi2/0/9",
"event": {
"category": [
"host"
],
"code": "MACFLAP_NOTIF",
"reason": "Host 0011.2233.4455 in vlan 20 is flapping between port Gi1/0/9 and port Gi2/0/9",
"severity": 4,
"type": [
"info"
]
},
"@timestamp": "2024-02-21T06:59:55.692000Z",
"cisco": {
"ios": {
"event": {
"facility": "SW_MATM"
},
"observer": {
"interface": {
"ports": [
"Gi1/0/9",
"Gi2/0/9"
]
}
}
}
},
"host": {
"name": "DN04.LOCAL"
},
"network": {
"vlan": {
"id": "20"
}
},
"observer": {
"product": "ios",
"vendor": "Cisco"
},
"source": {
"mac": "00:11:22:33:44:55"
}
}
{
"message": "FE08: Jan 13 2023 10:16:05.33: %SYS-6-TTY_EXPIRE_TIMER: (exec timer expired, tty 2 (1.2.3.4)), user jdoe",
"event": {
"category": [
"host"
],
"code": "TTY_EXPIRE_TIMER",
"reason": "(exec timer expired, tty 2 (1.2.3.4)), user jdoe",
"severity": 6,
"type": [
"info"
]
},
"@timestamp": "2023-01-13T10:16:05.330000Z",
"cisco": {
"ios": {
"event": {
"facility": "SYS"
},
"observer": {
"terminal": "2"
}
}
},
"host": {
"name": "FE08"
},
"observer": {
"product": "ios",
"vendor": "Cisco"
},
"related": {
"ip": [
"1.2.3.4"
],
"user": [
"jdoe"
]
},
"source": {
"address": "1.2.3.4",
"ip": "1.2.3.4"
},
"user": {
"name": "jdoe"
}
}
Extracted Fields
The following table lists the fields that are extracted, normalized under the ECS format, analyzed and indexed by the parser. It should be noted that infered fields are not listed.
Name | Type | Description |
---|---|---|
@timestamp |
date |
Date/time when the event originated. |
cisco.ios.event.facility |
keyword |
The facility of the event |
cisco.ios.observer.interface.name |
keyword |
The name of the interface |
cisco.ios.observer.interface.ports |
array |
The list of ports associated to the interface |
cisco.ios.observer.terminal |
keyword |
The identifier of the terminal used for the action |
destination.ip |
ip |
IP address of the destination. |
destination.port |
long |
Port of the destination. |
event.action |
keyword |
The action captured by the event. |
event.category |
keyword |
Event category. The second categorization field in the hierarchy. |
event.code |
keyword |
Identification code for this event. |
event.reason |
keyword |
Reason why this event happened, according to the source |
event.severity |
long |
Numeric severity of the event. |
host.name |
keyword |
Name of the host. |
network.vlan.id |
keyword |
VLAN ID as reported by the observer. |
observer.product |
keyword |
The product name of the observer. |
observer.vendor |
keyword |
Vendor name of the observer. |
source.ip |
ip |
IP address of the source. |
source.mac |
keyword |
MAC address of the source. |
source.port |
long |
Port of the source. |
user.name |
keyword |
Short name or login of the user. |
For more information on the Intake Format, please find the code of the Parser, Smart Descriptions, and Supported Events here.