aucoalesce/event_type.go (118 lines of code) (raw):
// Licensed to Elasticsearch B.V. under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Elasticsearch B.V. licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package aucoalesce
import (
. "github.com/elastic/go-libaudit/v2/auparse"
)
// AuditEventType is a categorization of a simple or compound audit event.
type AuditEventType uint16
const (
EventTypeUnknown AuditEventType = iota
EventTypeUserspace
EventTypeSystemServices
EventTypeConfig
EventTypeTTY
EventTypeUserAccount
EventTypeUserLogin
EventTypeAuditDaemon
EventTypeMACDecision
EventTypeAnomaly
EventTypeIntegrity
EventTypeAnomalyResponse
EventTypeMAC
EventTypeCrypto
EventTypeVirt
EventTypeAuditRule
EventTypeDACDecision
EventTypeGroupChange
)
var auditEventTypeNames = map[AuditEventType]string{
EventTypeUnknown: "unknown",
EventTypeUserspace: "user-space",
EventTypeSystemServices: "system-services",
EventTypeConfig: "configuration",
EventTypeTTY: "TTY",
EventTypeUserAccount: "user-account",
EventTypeUserLogin: "user-login",
EventTypeAuditDaemon: "audit-daemon",
EventTypeMACDecision: "mac-decision",
EventTypeAnomaly: "anomaly",
EventTypeIntegrity: "integrity",
EventTypeAnomalyResponse: "anomaly-response",
EventTypeMAC: "mac",
EventTypeCrypto: "crypto",
EventTypeVirt: "virt",
EventTypeAuditRule: "audit-rule",
EventTypeDACDecision: "dac-decision",
EventTypeGroupChange: "group-change",
}
func (t AuditEventType) String() string {
name, found := auditEventTypeNames[t]
if found {
return name
}
return auditEventTypeNames[EventTypeUnknown]
}
func (t AuditEventType) MarshalText() (text []byte, err error) {
return []byte(t.String()), nil
}
func GetAuditEventType(t AuditMessageType) AuditEventType {
// Ported from: https://github.com/linux-audit/audit-userspace/blob/v2.7.5/auparse/normalize.c#L681
switch {
case t >= AUDIT_USER_AUTH && t <= AUDIT_USER_END,
t >= AUDIT_USER_CHAUTHTOK && t <= AUDIT_CRED_REFR,
t >= AUDIT_USER_LOGIN && t <= AUDIT_USER_LOGOUT,
t == AUDIT_GRP_AUTH:
return EventTypeUserLogin
case t >= AUDIT_ADD_USER && t <= AUDIT_DEL_GROUP,
t >= AUDIT_GRP_MGMT && t <= AUDIT_GRP_CHAUTHTOK,
t >= AUDIT_ACCT_LOCK && t <= AUDIT_ACCT_UNLOCK:
return EventTypeUserAccount
case t == AUDIT_KERNEL,
t >= AUDIT_SYSTEM_BOOT && t <= AUDIT_SERVICE_STOP:
return EventTypeSystemServices
case t == AUDIT_USYS_CONFIG,
t == AUDIT_CONFIG_CHANGE,
t == AUDIT_NETFILTER_CFG,
t >= AUDIT_FEATURE_CHANGE && t <= AUDIT_REPLACE:
return EventTypeConfig
case t == AUDIT_SECCOMP:
return EventTypeDACDecision
case t >= AUDIT_CHGRP_ID && t <= AUDIT_TRUSTED_APP,
t == AUDIT_USER_CMD,
t == AUDIT_CHUSER_ID:
return EventTypeUserspace
case t == AUDIT_USER_TTY, t == AUDIT_TTY:
return EventTypeTTY
case t >= AUDIT_DAEMON_START && t <= AUDIT_LAST_DAEMON:
return EventTypeAuditDaemon
case t == AUDIT_USER_SELINUX_ERR,
t == AUDIT_USER_AVC,
t >= AUDIT_APPARMOR_ALLOWED && t <= AUDIT_APPARMOR_DENIED,
t == AUDIT_APPARMOR_ERROR,
t >= AUDIT_AVC && t <= AUDIT_AVC_PATH:
return EventTypeMACDecision
case t >= AUDIT_INTEGRITY_DATA && t <= AUDIT_INTEGRITY_LAST_MSG,
t == AUDIT_ANOM_RBAC_INTEGRITY_FAIL:
return EventTypeIntegrity
case t >= AUDIT_ANOM_PROMISCUOUS && t <= AUDIT_LAST_KERN_ANOM_MSG,
t >= AUDIT_ANOM_LOGIN_FAILURES && t <= AUDIT_ANOM_RBAC_FAIL,
t >= AUDIT_ANOM_CRYPTO_FAIL && t <= AUDIT_LAST_ANOM_MSG:
return EventTypeAnomaly
case t >= AUDIT_RESP_ANOMALY && t <= AUDIT_LAST_ANOM_RESP:
return EventTypeAnomalyResponse
case t >= AUDIT_MAC_POLICY_LOAD && t <= AUDIT_LAST_SELINUX,
t >= AUDIT_AA && t <= AUDIT_APPARMOR_AUDIT,
t >= AUDIT_APPARMOR_HINT && t <= AUDIT_APPARMOR_STATUS,
t >= AUDIT_USER_ROLE_CHANGE && t <= AUDIT_LAST_USER_LSPP_MSG:
return EventTypeMAC
case t >= AUDIT_FIRST_KERN_CRYPTO_MSG && t <= AUDIT_LAST_KERN_CRYPTO_MSG,
t >= AUDIT_CRYPTO_TEST_USER && t <= AUDIT_LAST_CRYPTO_MSG:
return EventTypeCrypto
case t >= AUDIT_VIRT_CONTROL && t <= AUDIT_LAST_VIRT_MSG:
return EventTypeVirt
case t >= AUDIT_SYSCALL && t <= AUDIT_SOCKETCALL,
t >= AUDIT_SOCKADDR && t <= AUDIT_MQ_GETSETATTR,
t >= AUDIT_FD_PAIR && t <= AUDIT_OBJ_PID,
t >= AUDIT_BPRM_FCAPS && t <= AUDIT_NETFILTER_PKT:
return EventTypeAuditRule
default:
return EventTypeUnknown
}
}