Skip to content

need CSV linter #2

Description

@amalone-scwx

We should have a script that can do the following:

  • verify that an MR is not breaking CSV format
  • verify that each CSV line is using the right pseudo-schema fields and values
  • no duplicate tests
  • ATR test reference Number, Guid, Names match
  • operators are supported (~=, =, *=)

For example, the following CSV lines get parsed into objects in harness

_E_,File,READ,path*=/proc/[0-9]*/mem
_E_,Process,cmdline*=python.*/T1003.007/src/dump_heap.py

schema

type FieldCriteria struct {
	FieldName string              `json:"field"`
	Op        string              `json:"op"`
	Value     string              `json:"value"`
}


// _E_,Process,cmdline=echo "# THIS IS A COMMENT"
// _E_,File,WRITE,path=/etc/ufw/ufw.conf
type ExpectedEvent struct {
	Id          string            `json:"id"`
	EventType   string            `json:"event_type"`
	SubType     string            `json:"sub_type,omitempty"`
	FieldChecks []FieldCriteria   `json:"field_checks"`
	IsMaybe     bool              `json:"is_maybe,omitempty"`


	Matches     []*SimpleEvent   `json:"matches,omitempty"`
}

// _C_,Process,Pipe,0,1
type CorrelationRow struct {
	Id string                     `json:"id"`
	Type string                   `json:"type"`
	SubType string                `json:"sub_type"`
	EventIndexes []string         `json:"indexes"`
	IsMet bool                    `json:"is_met"`
}

// ARG,remote_host,victim-host
type ArgRow struct {
	Name string
	Value string
}

type MitreTestCriteria struct {
	Technique        string              `json:"technique"`
	TestIndex        uint                `json:"test_index"`
	TestName         string              `json:"test_name"`
	ExpectedEvents   []*ExpectedEvent     `json:"expected_events"`
	ExpectedCorrelations []*CorrelationRow  `json:"exp_correlations,omitempty"`
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions