From ab67b3140ff0d9409da89a1b30c49d336d023cbf Mon Sep 17 00:00:00 2001 From: Mathieu Martin Date: Tue, 27 Nov 2018 14:51:27 -0500 Subject: [PATCH] Convert Filebeat system.auth to ECS (#9138) * Space. The final frontier. * Perform all the straightforward renames at once. - system.auth.hostname => host.hostname - system.auth.pid => process.pid - system.auth.user => user.name - system.auth.program => process.name - system.auth.ssh.ip => source.ip - system.auth.ssh.port => source.port - system.auth.ssh.geoip.* => source.geo.* * Rename `system.auth.message` to `message`... Note that there's no log in this format being tested by the integration tests, at this time. * Perform a few more renames and type conversion on numeric fields. * Changelog * Move `group.*` definitions to a safer haven. * List the fields that moved in ecs-migration.yml * Replace previous definitions with aliases for all normalized fields * Revert the mapping of ssh.signature to event.hash until discussed * Move the fields not aliased to the top, to promote sanity * Bring back `dropped_ip` and copy it to `source.ip` when it's there. Damn, painless scripting is painful * Fix test failure after introducing aliases. `'Cannot write to a field alias [system.auth.timestamp].'` * Add back missing log entry, likely lost during rebase * Output to group.*, not to the alias --- CHANGELOG.asciidoc | 1 + dev-tools/ecs-migration.yml | 50 +++++ filebeat/docs/fields.asciidoc | 178 +++++++----------- filebeat/include/fields.go | 2 +- filebeat/module/system/_meta/fields.yml | 12 ++ filebeat/module/system/auth/_meta/fields.yml | 123 ++++++------ .../module/system/auth/ingest/pipeline.json | 119 +++++++----- .../system/auth/test/test.log-expected.json | 109 +++++------ 8 files changed, 311 insertions(+), 283 deletions(-) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 2d9e4d0fa19..b65d87e8153 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -131,6 +131,7 @@ https://github.com/elastic/beats/compare/v6.5.0...v7.0.0-alpha1[View commits] - IIS module's user agent string is no longer encoded (`+` replaced with spaces). {pull}9084[9084] - Rename many `haproxy.*` fields to map to ECS. {pull}9117[9117] - Rename many `nginx.access.*` fields to map to ECS. {pull}9081[9081] +- Rename many `system.auth.*` fields to map to ECS. {pull}9138[9138] *Metricbeat* diff --git a/dev-tools/ecs-migration.yml b/dev-tools/ecs-migration.yml index 53a70566b85..5f646e28834 100644 --- a/dev-tools/ecs-migration.yml +++ b/dev-tools/ecs-migration.yml @@ -105,6 +105,56 @@ alias: true copy_to: false +- from: system.auth.hostname + to: host.hostname + alias: true + copy_to: false + +- from: system.auth.pid + to: process.pid + alias: true + copy_to: false + +- from: system.auth.groupadd.gid + to: group.id + alias: true + copy_to: false + +- from: system.auth.useradd.uid + to: user.id + alias: true + copy_to: false + +- from: system.auth.useradd.user + to: user.name + alias: true + copy_to: false + +- from: system.auth.ssh.event + to: event.action + alias: true + copy_to: false + +- from: system.auth.program + to: process.name + alias: true + copy_to: false + +- from: system.auth.ssh.ip + to: source.ip + alias: true + copy_to: false + +- from: system.auth.ssh.port + to: source.port + alias: true + copy_to: false + +- from: system.auth.ssh.geoip.* + to: source.geo.* + alias: true + copy_to: false + # From Auditbeat's auditd module. - from: source.hostname to: source.domain diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index 905a63e1ea3..90e01727639 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -5850,6 +5850,30 @@ Module for parsing system log files. -- type: keyword +-- + +*`group.id`*:: ++ +-- +type: keyword + +required: False + +ID of the group. + + +-- + +*`group.name`*:: ++ +-- +type: keyword + +required: False + +Name of the group. + + -- [float] @@ -5866,73 +5890,49 @@ Fields from the Linux authorization logs. -*`system.auth.timestamp`*:: +*`@timestamp`*:: + -- -The timestamp as read from the auth message. - +type: alias -- -*`system.auth.hostname`*:: +*`host.hostname`*:: + -- -The hostname as read from the auth message. - +type: alias -- -*`system.auth.program`*:: +*`process.name`*:: + -- -The process name as read from the auth message. - +type: alias -- -*`system.auth.pid`*:: +*`process.pid`*:: + -- -type: long - -The PID of the process that sent the auth message. - +type: alias -- -*`system.auth.message`*:: +*`message`*:: + -- -type: text - -The message in the log line. - +type: alias -- -*`system.auth.user`*:: +*`user.name`*:: + -- -The Unix user that this event refers to. - - --- - -[float] -== ssh fields - -Fields specific to SSH login events. - - +type: alias -*`system.auth.ssh.event`*:: -+ -- -The SSH login event. Can be one of "Accepted", "Failed", or "Invalid". "Accepted" means a successful login. "Invalid" means that the user is not configured on the system. "Failed" means that the SSH login attempt has failed. --- - *`system.auth.ssh.method`*:: + -- @@ -5941,12 +5941,10 @@ The SSH authentication method. Can be one of "password" or "publickey". -- -*`system.auth.ssh.ip`*:: +*`system.auth.ssh.signature`*:: + -- -type: ip - -The client IP from where the login attempt was made. +The signature of the client public key. -- @@ -5961,88 +5959,67 @@ The client IP from SSH connections that are open and immediately dropped. -- -*`system.auth.ssh.port`*:: +*`event.action`*:: + -- -type: long - -The client port from where the login attempt was made. - +type: alias -- -*`system.auth.ssh.signature`*:: +*`source.ip`*:: + -- -The signature of the client public key. - +type: alias -- -[float] -== geoip fields - -Contains GeoIP information gathered based on the `system.auth.ip` field. Only present if the GeoIP Elasticsearch plugin is available and used. +*`source.port`*:: ++ +-- +type: alias +-- -*`system.auth.ssh.geoip.continent_name`*:: +*`source.geo.continent_name`*:: + -- -type: keyword - -The name of the continent. - +type: alias -- -*`system.auth.ssh.geoip.city_name`*:: +*`source.geo.country_iso_code`*:: + -- -type: keyword - -The name of the city. - +type: alias -- -*`system.auth.ssh.geoip.region_name`*:: +*`source.geo.location`*:: + -- -type: keyword - -The name of the region. - +type: alias -- -*`system.auth.ssh.geoip.country_iso_code`*:: +*`source.geo.region_name`*:: + -- -type: keyword - -Country ISO code. - +type: alias -- -*`system.auth.ssh.geoip.location`*:: +*`source.geo.city_name`*:: + -- -type: geo_point - -The longitude and latitude. - +type: alias -- -*`system.auth.ssh.geoip.region_iso_code`*:: +*`source.geo.region_iso_code`*:: + -- -type: keyword - -Region ISO code. - +type: alias -- @@ -6104,43 +6081,38 @@ Fields specific to events created by the `useradd` command. -*`system.auth.useradd.name`*:: +*`system.auth.useradd.home`*:: + -- -The user name being added. - +The home folder for the new user. -- -*`system.auth.useradd.uid`*:: +*`system.auth.useradd.shell`*:: + -- -type: long - -The user ID. +The default shell for the new user. -- -*`system.auth.useradd.gid`*:: +*`user.name`*:: + -- -type: long - -The group ID. +type: alias -- -*`system.auth.useradd.home`*:: +*`user.id`*:: + -- -The home folder for the new user. +type: alias -- -*`system.auth.useradd.shell`*:: +*`group.id`*:: + -- -The default shell for the new user. +type: alias -- @@ -6151,21 +6123,17 @@ Fields specific to events created by the `groupadd` command. -*`system.auth.groupadd.name`*:: +*`group.name`*:: + -- -The name of the new group. - +type: alias -- -*`system.auth.groupadd.gid`*:: +*`group.id`*:: + -- -type: long - -The ID of the new group. - +type: alias -- diff --git a/filebeat/include/fields.go b/filebeat/include/fields.go index 25be0e14169..aa1702621d1 100644 --- a/filebeat/include/fields.go +++ b/filebeat/include/fields.go @@ -31,5 +31,5 @@ func init() { // Asset returns asset data func Asset() string { - return "eJzsvX1z2ziSOPx/PgXKU/VMso+s2E4mM+Or/f0u57z5Nm8XOzvPXXZKgkhIwpoCOABoRXN33/0pNAASIEGKlORktjbZqp2EIrsbQKPR3eiXY3RDNuco44t7CCmqMnKOXvMFmtOMoIQzRZi6h1BKZCJorihn5+j/3EMIoQvOFKZM6m/N6xllRI7vITSnJEvl+T147xgxvCKAYqxfG+dYLeEXhNQmJ+eagjUXqX0myG8FFSQ9R3OcSWKfRgjQf66XxOCeC75C6yVNlkgtDSlojSUSBKdjdL2k0lAFYwKy9Wt4JnlWKII0TUhxeAhElhhecIHIZ7zK9cxMH95i8TDji4dyIxVZjTO+mI6b45S8EAkZ0zwYZ/nPQUO8Aljo8n1jjHyByC1hqhwoeoik/rd+MUIVn88lUQFJGWeLvebdwAR6BMm5UCQ1ky8VFkoirGqErIiUeEECKhT57MiiC8YFmeAZvyXn6KRBmxJFD9Is4yI+r7gBJgim0E2eWeiAOqkEwatDcafeSAYiWi8JAxIoWzgeJEKTIUcowQzNCPpeqpQX6nvEBfydCPF9SB5leaHGmq4dJwYAwMDq3FRx0oIwIrAi4b6hEsFCmz1yi7OCIJmThM4pSUsccy7g96lGMUUciECUwUODXJIEHtq1eUEzMiNY6UmZ0+ii6GmbKLoiUuFV3j3IS4YSLInFtyBSoZzmBDggx0ISs/FLaCFHWL6RI0QVkooLIkvI+h0u6IIynKHpv5YQpui+ILkgeufpxXXgzZI7yIFAemBmhFbAYY7rvLiRIDNxQjOqNofbtxYgIp+VwIneseUk5IJyQdUmTor79WCkOICOGQwew4txEiS5JfqLSYZnJDvkMbIsVthsUTzLCHKIuhflzslwiGpk5IInRMpxLvhCHE5gaQI0ArceFnzkLJlneCG3AYsfuvCpwxBb6qVS+VgQmXMmyZhkOJfECIA2xmuh4Ln51GzHGVFrAkL4t0KLBcxS5JDo/biiWUa1dOIslZ0UWSkxyQhb1FSZ7TRd2KPJfOym4dX19fuKmhlP6wteSCImeGG0sQrfQvDCSUSndZl/uQ+5J8Ean9Q/qj6bF1k20X8tf6mz1z2EvkPXZJVzgcUGzelnVDBFM/T84gpRlmRFaoUtDI7P/k4ShfACUxabW1iUsSBzIgQRHQzdMq8f7Jf2CKLSzakBbN8rNTmNVZ4/fDjTzGyfjhO+ehgZF5H+yLQIpyuj6oRLJLKxOyCG0/+iyLLqfNGwrJLlDl99GqUISwduryHpc3xBFPpxfIJSLJczjkUq0ZqLG2o5uOQEmhFJ1NhjBjMsnFHsmEvrz+d2M6dYYa1nRqGseFpk/eDYV+9ZE0UrCZWN8m/mX112ScJXK87gO8vmCN9imoFcpQzhLLNaj6YjMFx8yvX3Yy1Bfuesh/h0byI461UhGEnRbGPUh1wrVlpJMOYD4szTwPSQkKcTiIIxyhY1QXBUaR5HwTSmWHVqhXMuVlgF75Ws87RYFFKhsydqic5OTp+M0OnZ+aMfzn94NH706KzfoI06VSo9Zmb1aS5IwkVaUy3DQamth8lTMaMKuFe/i9RSa4xGbdZqaU6EmT8t1fU/lMBMYtA0A/k3rrOlXvBgHo2gso/MPyYD9nHJflpiW6W2EOYsB2Q1CogQXLTK9LaDTX/kmNoerpqtcJpS/S7OEGVzrrkctGE+N3jkOHpWeAtRmRZt8quDrIo0M9V255JEVhv3+cVVfN9q4epmKCQwmK/gDDQgn3qPYPLOUQ+eBUC1OQTO1fIL4RkvjFkL7z1MMqr/I5c0B/ZaYlVCSwTRPO3rM27LccW4IsHSmT0nz7Wpor9wC6TZV8LpZYzCEjdIXgS6lDGVxuCUePr+DZgpFA7ZEr4ZlpUdzvLCef5QEnFLEzL2Bq95RAsFbY6lnEjEuELJErMFQXRegoQJAftPy8ql4MViiX4rSFFJMokyekPQX/D8Bo/QB5JSOdJmrNVTvRdLqLJIllpIvuYLqbBcIjMmdEXELRHjnmpOxRi3REh/t+/EvX81QJxaZua/YkLzpxSbT8Yn45NjkZzdwT5666nhW8hwfNGgYsml6tThelHyykKpUdPARtP98Hxk9LeCIJpqQ3pOiTAIqbTcep/OkT5YyWcqlXzQmI9yb53D/jD7Cb5f8yJL9VEBu4em49gs/oQfz384OUkb4yL5kqyIwNlk3xE+d5D2GSSYVTRFTG/dLNvYDSsRTgSXWukwrrcRmhUKTc1q0XRa7vCu0c+bAneGS6vR6V7VEytuT7eLWw0GjurSFtT6lxW/RgnCgmiNCBwoPEcZuSVGC5akVOAEcXqdHa6GAvobHHJa+srhsiOiVKGYYoXalCv9J19iSc7Ro9j0Hmmt6vjkh+OzR9cnP52f/HD+6PH4px8e/ddRP855hhV5GHqVjIJlLQZQqRqs8sIcJnZaDJuZ4wIGFQUYqGkjrU8FIPUJAV/Qyu0cwfzBTpK1X/SpVqrbsvZ+RAlEHfurmtNPfzvKBU8L0PL+djRCfzsi7Pbsb0e/9pzV11SCj9giAZ0tBRcnXiCCk6V/nDfoBddPk+JAfwwI/u8bsjk9N77T05HGemb/dfa//Qj+C9k8NK7XHFNRn0j958LoxG4gOE3Riujj2zvqFXcLga6WIBrh3LcqECNSkXDRzZDkGD3NMkOw2YktNmlcJk9TntwQMQUVfXrzk5zaGWyZ3vCiAMUuC1C1606jHPKKZBlHv3CRpT1ZorFliCMk5srSb9qfI0O/ZIirJRF6NUDNi8ILFyzhLMGKsFDmIJTS+ZwIvUHt/FciU+ntOBeEZBskCRbJUlsbY3Q5R6siUzTPQlAWvzRnDCiaG0dGwlczqi1WyhSHg6g5PLdAScaLNDwZLrxH/TTxF0auC5IZFdpcLwBorRBSNhdYKlEkqjBDtStT6bvmRNAaprn2Mo+3qN5z9IYoQZOZsblLfVmfKww9vzgD3QlYdU5UsiTSaMHgKKceev3ayKMZzK6ARwJzgkq0wsmSMrM+FRElQFEwCWQgQVZcEfc+4oWSNCUerjh1GFlN3wfpGwPw8chedQYsbcBWoIBbLXrfxrAIwokbfurmgt/StHT2BVuXeEr13vqzGZdDN3aM4IsykpyN0CIh2mqpbbwFVTjjCcGsRVJZr5K5EPC8RMGACnlMsFTHp8l+43rqIUPgaKKVE4lKw7fVwrSQLMiin63UpL8fmR8AwU60USYVZgkZ91K3SwLp8enZo8c/PPnxp59P8CxJyfykH6mXFh+6fOYYBgh1G3ULlfsbWCUBvpXVgwT3a09js5wpdTZekZQWq37kvXESYJMPoQ4nCS/A9BhC25MnT3788ceffvrp559/7kfedSUPDUZ9bnCxwIz+bvQdmpbHq7W7NtV5GsDSPypKJLiHzel5rA9jphBht1RwtopZ4v7R8vSXq5IQmo7QS84XGTEnI3r34SW6TMEzYjUDsHkDUJVpGDtzXeRA7dytPe539pZf+dYVzJTW1xtqY+USs/f+SYMcZByz1sYwUTCaZTwwNYNuSbIcJVwYBcCcPdpUrJijxCHt+cY2WoBo22X4kWM/3G+/fjBA0AozvDBX/lRWdEbta6P8NqXIYXwmVUCJ79wokay0Are/nPKPVIBpDtcSt7YHZwXNlKcN1KlQeLEfERXTWhLwoolr/7FWaDSsJoa+xl/HBcIWCi5heA0TyRGQEqm04V8d41YWPGv80E8aeN+5zWnenBGUEoVpJj0R4KHXLIFLMDlOboh6GPjB++9PmjemNHjUNV/vtbUriCxjCzwa2y1lrUFpaWctJXT5/vaxfnD5/vaJA0hkxN2Zc6EaxHr3/1vIfc+FihIaO+b34+U3Ty86p6aBMeUrd0vfjTRifHc5sTyeMSgiuBeENxCHIQshjgDDS8Iznlge5qLJAeZPnfvC85UywlQ99qF9DjqHXLNDHHRv3D7ugimxmVDJJwlPD4L9wsBEl1fvkIYZReymLIJwQfgk57SmJnWifM3ZgqoiJWCfZljBP6KIjRVysKm2NocR2LEJ1vbZoZBdaPurFZUd2SGX0o6utpLVceCZ/OVJ4D3rewiAYV/XBxV31nP9irmpHAaUtCmEJjwzUApBhbL3NBjNqSBrnGUjxIhac3Fj4Y4QUcnwc+VuZGgw0Ds6wuDOtoHkbm722rDdEpYGbpGoJ7ZT8gNbGTjBwkdwHeAat8QHsJpIJBEUZxNWrGakOa5dUBmIyEBsInRRQTYGfyxJkx/76w7XLsbIRt/7RjllVQwjqus8b4E8/b59xzhe6S3RW/zj9QV4JSFUyUCmEh2fnJ4/Ogn8f/qPuYZY0yzTG/b4h8cnJ1HDB35pzsfe9+MQduR5JAzvVh5XECc1t3AdgAAXJtPCjaRkDo7vzN4JOXgQGoau+Iq4MYFcDEBNCUvhlJyO0NRJLv13mkr4Tw7/yQX/vJlGZ8l91NTzg/ggG0LjPeod71KZ3AnEF9uIdRsXBDo826AbytIx+mgC6FegQ9kXgoiXJc5zAq69jBgXtJ5oe2cCO9zed6xhkqvbRaokyebeHTAz8IP1GWAuHDzkwCUwNKkafDO1NUgqfnNUqYPpQUKxNBxnybn8hProSma7bQRXPb/dJbjKrHbMrQTB059Vm/IAWxeYZAfj8TDccPlMC8PS9m1EdaHOqJGIUVSuKFZkwcVmz1WFqXWw2gJE7H0eNmGITriFX9WGsoLLKBnnxv0F9lMjrhf0ljBzz0clyJsycMNeFfg3oppjYOmb1wXlUEGE21gYN1AbcKsHHx0rW1D2+VgqrORx57hrIaQ7H1UGDkpwrgpREWgYKzjM7Jtwst5CuLbgqwCeDR5W3P1tVsBJndEbkm3AzW3C7y0sqbFJkhSQamMv7+QohGmj8WYZT27gQk+g3wossLZYKVv8i/5xTbJM/3fFBTFBIjQpcWgIAUgMqaGU2XNhZBIG6UNuAwM/b/TyrrFIq8Mjfk5bZWOXhRakdMg15bgfi77j2vrmvYFnGLuvDqL515OE4RceVBubQpmNa+OiDJyMb+aN/C2LD9vF5x9s3BZgy9olnCUkB50Ko6l9d4ru24wA9NAJHqIe6PGH48TS8y0aRp1ZlddOzBhdqvDG3Z9QI1L0tBZCEKayTQjNRLBQVhFhwm0xS71HdmUh5rrKhohOPMiU+MS7lLJtmn9nSMuPPQNZriyy8iCzJrh7HORfoV+0lQ5rGb0XK7+yN+YrghnI6VsivLu0MseqDHjRi/O9REWOFA8gmjuEPCMrwhQRWmit8A1BshAlkZS4gD8mqYSsKRv01xlHVsvB6WLwyEx/hz5q9lEFwwqkqd6idvqNBFJILvmamVurRGUbtCFKM+r/oJSbADkubgKQlCGFZ3oXaxEa/HQp0f/z3enZ439xTpJSNS+d6/8DwXZc3GhCYC+BIlUp2AFA47ChyY2M8ufRFcnR6c/o5KfzsyfnpyfGarx4/uL8xNBxZQ8K869g0fSyCYIVXHwRYd44HdsPT09Oot+suVjp0yEhUs4LLbyl4nlOUveZ+a8UyZ9PT8b6f6c1CKlUfz4bn47PxmcyV38+PXt01nMXIPQBr0ExL8OutLbBFBUl73+0Hq6UrDiTSmBlArsoU2RhUkBRXbChWmq0XnXKUvKZmLCclCcTL7okpVIvf2pkFWb69RmpQTSxWyQ1gbu0zG8RWgyRW5emO50YN1pgSALuMMUTZqYkw/+tsWOWWC532y0VW1XBF7G/Pf23i2e9l+wVlkt0PydiiXPQIUx+wJyyBRG5oEw90Kso8NougOKg68704cvrvNNzVYf7n1oDgbeoghZDLJ7Q/YSZs6C4gMQYnOp9LpHibVqEgSaXzoVq/bUQnZljc9dUhbSW8pYqlHMp6awWJAj7QZEE3jSHqKajQeCM6MMrpreZ3eU+oBIi2oKoYDhjC6lMIGKQkgcHx71wHd0x1qSm8i9smSfi1ADk0XUyPh3HfVfwS4sSVYj6nclQL94zCyI4ivUsMMx43IdXWpIm46iBvBaq3oHcrI7LXKoHLEajwu3LbQxY5QBq9ZdKRVliSpGgf/V+Y+ZGwHvkkDf0A5s8ZBO44eWxC9AFUiVBas2rX0uzN67F4HrtB1qrz6AZsjZwaiurzKsyMAHM2aaqYKElPRwE4E5KcDYO60QAr/uZZvWaFo79GmUZHIWj2ro1S0xQPyTfZ3yptVpzwYLz3JiJOU5u9JForFJtdRh/XWRxGv7f6pUIve7OxiHQExunvMmUW3jNL/BRW3w9/+Xcj/xRVGJRa0dtMZFU3kxkwkXTJJxnHPd07X2g8gYBFGPmhgUuzAjvk/Fi7FnkPCvAhn4QLttHSdCGF8Ka+d/LKj/cGMR6sbYOZqJt5n1G9BZsbvo7SQHqlsGNTPCyTDBUB0InmtFO3eVA1HuzwpRlG7008yJDdK4HDSYE+BnUEjOI0nBuDy0+sJR0URMZFXES8lYAzBqbw04SgrB1H8BQzAx6SUQ2PzHiFdU2n8VU84BaH+mL6oXWMPcy/7e8SQ2DauBs9ktP9S3w4JXTijqiA4ret9a5ggCYSWvcHF7v5y9oIC5XX68KO8YMZ5vfS9XA3RobngggQS7RYiHIAk7P8IisconEgqjJoLm5hm9MKTCNRG5WGWW+GRWfo7ZZ2vmm/3Bz1XO2yGdFmKynyjcpb6Ua2LuE0tjqQL6VwTjL+BoRLDd6bIrAsTPbGOdgCcKb9FIby61iVV9q3zPdg26gFZyt4IIaoZQKiMi16/0gOkX1qIbteJ65C8m2+Idq/9VwUeZf/fRAdak/QI0qVMbfysq/25p1MZSFd3cycO2vrfsVXT5D9z9ePnsAc+nONu9q7f4V/FgNHvE1IyJKD/wyeFXhq+9N6YXKQVcDvRg21PeCrrDYGEEMY3xZG0YcSxCyNhiPH5XRimO1nU0qU+bJ45M44jead/xVoQzxROGs5omKkiDp73USAgOouUb6C41itlFE6i1oPShcqwA4TZ1uaCvI0fCMn2oKp/EtugoiuyMGUUDMayyVKQzll7oE5XPFU6hqF8WS7INlRRSGmwGTs51GlI0q/tEqFy/LB/2uX18S7t/0J1iIjZ+Ehqvw/TJW0ku/c5Z9CY8LTVPgVIdDhUFJSlO3zp+MPje1rWGW+yZ6VQGWTZSt0ZU7hYfX4yrr+CJBle0hlV05yi3hlHV88VjKXbIb/CjKxixGQih3mb4qeBLVN8CSy1oIwqvqSb8toD+oa9s+//rsDvjG6Knxg7tr8xJUvtxIbU66ZKcRwuiWClX4j/R2QM8gw6OeBlICeutuLr1IreDer5YCW6Z9snqRzhJkkKr/MOFZRhLl/Md+Vi9cCZQ+kWyjbSxGSEp22Lr/dJFsXV7vKritMU/7bxJgTFf7x81KPUUw5iExbOwcTWutgE7dt1NblAxyjD8y+tnZvTYhuMhqN6S/FTiD09CG7MPALMsDMWUR2OAu3vicCAvTe/V4E5qWTlwz9Yrrb1rnvDG1veJ8hqUm2NAfw3cxt9NTWU2/ve/B2RpvpE3hG4HDwl75GBeFIHBPStmibpZRZvw6vXIKzwO/deHusKZQywaWNJJrtXsMMshOmrtA5PbU0/2Y+5VNIN2C5wBxojaspmWzvODC5ma69HBbJ8WKziAFXoOCOlfTMoV2GrrsLufodjVyCYHW5xhkyY18V7KXCeqdBgHEioXa2cb8iW+a79C7surglfGgxVBV5ULHeYbVPOYzHDTv7+q1Dh1YdD8hTHE5QsWsYKoYoTVlKV9LE9r/ICZnUyzWNiEpRnFPWVtdVr7BCXp3hf6/nleSjbE0jMuAnDle0axPlF9FUEpmFLO+5FwhgwLdFyRdYjVC5vsRlAGZyTQ6pzFS+992eje9J+PTs/GTXecuCMpv0IRFsqSKQLmPQVR9/unJ5MnjXYny0cZ0UqXymk56ff1+kE7aLHTi16eVQTniHSpYuTq3K6KWfM842FdK5WWZZAMwej368vn1CL1/d6X//+N1hCRbL1kqrAoZt7r6q4qWKlsi2cCs2V4ebY9PHrcTNONpc3v2j96+tooSsEW9anOEFlOFaM1F1iwud5B0F5iaRrKLR8Hp+LTJ1KbnB0J+349ePFyVHio9CYp7VZOGcy+UettvDl7zhQFTNn2oCsmj+qnfSOdA01+efng7HaHp8w8f9H8u3754F0/VeP7hQ1OS7hVy1h6blfEEZ6CUvtnoAfnibVDIT+v01Ri7KhBXXjV6Na5ASIW13PU28N4IwM3InAOTZFSBsKUKFXDrXmZb51hEg34vjf0iwH1mDOKpRTG11x5VsLizdDDz7qI15ACkxxYWktXTInE4bvCjxgDHMVNriW8JwpkgON0gqXnLuBCNB0jChTuF3KIbgghLeGojrBkJL4yggw4Ufrq15cAyghmET26tNrZTQBqS3Eaafd+ISPutIALMOpubYYy1XkFpgZyxwQChrHkbPNz1CC1zQ7HCw6VOVG3sfwyA49GkM8w2trY3ZEpx1+PEpXFS4SiNn6Nw0P5C59T7te2usf22seu+ccuN4z6DaUxrLrjiCd9Tnr91ISQWGmqNuPaUM+++jgpygNSNZw6MEx+O45TA8zlNIvvwA0n4akVY6oIMYMed12b8T4iyGS9YfZn+hHih4j8U7IbxNYtNgQ+rMRU2yYKkk33dAl5+chl5JMv2VO4ne4BAhkdcG/n5bHw6Ph2fhfR+Z8vhycYI7PDGcGe0hwrpeMrCM3dQcRJ/aqqPjgpT4eSQdFiIcUqaxaUdhxxsPhzAgRNS0nG4GSkpGTgliiucHWw+AJqdDOPILFamjJU37+j/rS1ElNZHT35qIfYOJy1Gs/3Np7pJQUn22ePmOe7XVAsP83fNX/qnigal2uylDWFCK3dwa7mmatmSLZrwVY7ZRmtSULmtMur8NHAsJU+oiTqkahkrQLbhBcJCQOF7k+SjiDAAqgwhzIxGBQdkWDWoxOsPZgc7aE+NxF+HLh/V3aVN++Mfh9wjazxT80oO5pt3V/XmDXEmqTddGftQwsrifK5M8pJebyi2anyzuSDQBmhUpknCfcqYy/GfppoPplV7JvNw+NLfudcVSG9xvT6I16yrvK5bmfTLeFt9Mr6gl9Wt+jZv64N9ypk0HKzHIumb5tTmZIX0SUiUkUqUKdQ+fTdEsF6ul4q8x+PH45Pj09OzY5sCvCuRBnc3rYEMsQkBoSB5HzzcpR5Gq/jAZZ+9li+17e/Oj6qIpc0bDfNQ9SlWwkM0fRhsI1u52bfwjZSblp3+aDq1AkoqvJEusM8gc4U1tKnvhUwlPKdVSMEi4zOceSX5Hcl1d3x/qYVFr5r9XYHBdkawWBSrlhTwN3iDZsQey2U5KshOkoRJCtf+0apCHt9+OjrOjkboSItq/V+Xa/jk6NddRVyPYUVOYWQdkJCegBKcZSR1nRZt4J9Akq5ohuM57dLL1iu3RuRMH1CMsGTLEGEHvsMgzDHcajeu3KtoE7Vvhr5DBaBassL0JoPfR3aLKZcxg2W5Z1vilcJq61YoXQUP+ys1rrJ6vQCn8n+D+sb1/r1GV8b+3rfxQG0K75yy1Hp0neSCxCqI7itd+yU8h15/EbvD+5pVe6xzxhWjd62uYottmufYYHQTu5FtqrrQ4BH2WmVBesoNkV2JkrX580oHmLVi3kVJO2lluMfl3NojBJHPORGUsAS851JC4wd9knBoaJ1C9QhTPHykPwoA6tPJWjLcZt3R1OXCOAIhqNCtOrwjKVtAFLCtb16ntFIPH/1IfiCzOTnB5Eny+Ocfz9IZ+Xl+cvrjY3z65NGPs9lPZ49/nD/xvu2O6+kpdTtvUEiGpaKJyaXuqZj4EaSOy6v6HXYXdZQRM0K71sjDxHFHtlfAHnoPhw0DUE8WAVimTLdZSCiU4BPr2rBNHUAT/+WaYQWQp8BM0/2icIaFXFkRCdBa8EoV5rMeBvGFDaUC6LV130eB7+TLR+Ozcd/ohFoTOseSvpTvw5dUmmQbaW5n+Q3CWqU1Xg2iTMR9KOxLXTwo6YzqTOnPzxfqjuYm4eD90dzA+ndIC09/cH/XDn//WcuAzTs9Cm2HOUN+u+z+KYKekx+uyM9RkOXauAloXaRmgVJDXlADd7fC2tGy2u3UtmeZ+PT6RbZrlMYiGdvR9c6GitSJbUFcK7J9ANyWp2qltWOFtZuM01pUu15S243G/f4VUzwiOO82x6OB8K6TPBoI7ybLozmRB0/zaBvJYZaquzZ2IbJQQH/88LpbOn/88LqeP4LhtiEjiuhfR0YNl4k+ska2Cxj0nsb2hsFD4rpAVLETrsZZt3u5ENn4T1O960pArq07+gshJiikao7mlclaLwkjt0SUmfTVgHa02ZaCzBtr1P9mArrb925qH6qm+jONfmoyoD/BiWJg/HrfNb1fr9djq/uPE/5wUdCUPCTsYQAqMA4eCgL5MAl5+GR8Fr5oOv/YCVuqVfbdxI/HmOjFn7iTbWLzsYV8YIZnbYdQf6qP1B+XZhxFpIqPe+zyvac1S54wKHmk11hxbfwiDEE7G4QXWNtvrUFQhciQVDTLbFmxKkTLhhppftH2olacTAJjbGWqVWGolpQujcsxx8KweuUJdSlWiantEhrTtrn0NBy33iomGqnpHfzCcTJl7OfHD6/3yctvy8y3jOrHtmj2rlj7/PHjRw8NB//f3/4ccPR3ijcDYYyI2k+8XgGM0stiIoMraXUEVB7FsrSgAyP4sc+nLizNVaMC6QWQ24felEN3Uvi+OaRqwo8C5RZCEyHEz9Tfw7BVVniDQJzYDFqtJ7P0IRegztpgpGxjTg24WQhAeplVY9MWHhJQJDFJWX7YDRjvC14GRVZ5XUEqbjCT1Vga0xltYgMl0oK8rS73qqdiN6bx8eNH8ejsx4+apPi1OoafMFA0o3U57Y45Gn89yaH5xGgHTw8qLRyxIPn3mEC9S83pYQgK64aaX8zNXH2aw4POTXlNOMXEAwiG/wuCgXyGisVeDSkfIyRzmq0WrRbGuIYDu6Ws6e+NxeWCmt8w4NTGv3trVDuEwokwrgZ7g8cQWeWqoguGYN6YBlAMhJpTsMzBpViRslqqK2VlKqZ+XQ41ZGsRfVd8Ohd4sQpLs+1yq8OFH5apFRo8h0KyekG+m3p7X/G8lfm+i55KjsQm8a6yyH7Ef7RQahupiS7HUtbA7lR7yUCJortXH17NVJIDm0qW5WDqrq14dA686nhKkIzcYo81FEd+leIX3rU7vjUuJgI2uu9o0k8olB72nZiAaOmKl5dFxWg6qkw8BkFgG0uPqaFuioPxyvhRyyqG6Mvdeb2redOK+h1Y6W4KS6Ef7kbbd8JUOBpbqrTtsANvDGPIrzd1b5HiN4TR30mkVyVZYbpjGs2WDWdAh/nG6CBFcLdfVTrmW4bXhY2aKuZFiDXkbLOCQnX6lchcfyyr5UHwGfivXSSavelxgS0JZ3PDKPWmXbUo87Iycb1Moi8fTJhbU0og//kwWWFAOolROe61mm0jY2aCrzUSJ7v0txtzWV+Ck0u+tglGazIrrwzgpqxeVd8apkVJeC1Cqv/Obs396q96fWSWnNvw5seLKmygrRUk23tLl4VO2puAHSBTsXa1tRXpCv890nisf5zJG/19bFpRy7SuKNsPof5+CMIcq6SP3Ok2fZLlEJxDIzgvloKvehYWrh8TbTT0T9vviaw9znenfPf+TNwL8Z0wcj/Md8HRTcz3EPoOXZNVzgU0raGfIQqCKPTj+ASlWC5nHItUgsfRCtrvbIBNIRVacBfRSBI53qyg0Qz4x9dUEnCPSpRy9r1phRAGl5e1UALpjTNaxkNpy/vc8iKEMzS/r7mWumGUL9871sxzblrQ36s6sgc1RcrCb/eiU/3GlYWD4ymplSMxRfFscR2cphN4YVLWkrPxaaahlzulguHpV8fw1diBtUOqfETJlrM6uIMLKByj9zYwyst30wBHaJGYEicpXVCFM54QzMattLmQoyqSoIWWS/siunwWVIyyhVp6YPDWeRsOVqu4tB2LfWHihc2U81wWjunG/sYvOTMIOb7FNMMzmlG1mfxexRaVFBTymGCpjk+TbhKeeoAQ1OiiVSkyKm2tJOmC7topygWHHujlqlYVXc0vx5/7s579RNPykvNFRsxOa8du7hm7Edjrwy3jsxu97OTvuuy6f0eA25pw0BOoHp1lftN7Vi65UBPQ0hdV0j5myZILh++43OX3QlW0CiewZKDBlRhNuboDRWUmVX/+iHnnoVvFWijufPoDuLDSEsRJzQqaKRTrAVuRcoCL7hJnPFelwmX6+TewmQti77F5MNmBlkuYCYOnZFpbVDEsqBgBcsnm3GdUm9YVip6KN/XzrZzpF3Tsb1XJce/UlC1O7bqu8r2sZZ6Us3RTzPQPJonUztVf/GcRTNXvVXXX4MSugCJ/pro3ffXR1ukNiB42yTlPD8D83gzkPDXGRRRVsa+I8TC95yn6ePmsiUj/v8zxvqaxh6qC2ETGU3LYGYRK3vEp7Cs6+iEy0NAK501M4AYy/vtDofNAxnEeUhx7eJNAMnehPcCBFMVr4FoJg3OcLMlZJV6OnponR3HpYn9Fb1yrylBs2MZTMbFQYUJRmdCm9VmEfrBQR/pX4qXexfFsmbILV3bHOv/ciePoeHV9/f6ZxQOePP9+rPNmjKy4ImHJi65l3UIn0JpRwvwqGOMoZvDa1Zh4T8zlpQoYI3CbCAU4ZljSBOFCLU3XG2VrCVfu2zpxjfpw2yjzq70NJ9pVkYNad81ScrEYvQNNV4D544fXcbRLpfJJ0yl0APyAN1KTrVmOrh7/iNqcNEMwl1Xp6hXyPKcHTzcTSZhq1M3opMBcH5yj2Ec9qGNl4WZTRcNLcgD3fksxPX/a5kSIWlnhwyyXAx1H7N9vhFhrnv4eKC/8amMFO269jkDvWLZBrlk/rfyqDZDms+d+zAXKs2JBWVmw2Fj0ppGtftAuJhoXPeGA6wJ+6IjtcKtrIxencaDRViPFLI0MM350oK7rlXAC4nzWYxqQnzK27RakTlTdiRzSFNmrAwha9b0paRBV8y8flKi+tyl1ouq3KiFRe69e3vfGpU5XRC3oQ1b7TcxAwtmW25k6vbwu4ftQuwMt7TcZTYomX3wbDKPuS++HQdTtyIB3u6TNG/SQrsj5itoroA6g+Z0rcuodvKbMpa1dqg8q26DMxMIf6zePzZvmvIkfoAvCW0yPfc7Ol4Rfvg9COBYY4hpTbQqQFNlmuKXx04wKtgOPnLMGeK8jtQFvlyO2NUMsnK+DMmWkQVCTrNYksgMS1t5AqE5PJMcspCOWazZwirItTYbqNMXT0A44PcaCizQiqlMSy1Q7MB1J2KyoYz7ulmUaSW51KogQkZv+Ac4YG19ZBkkZJ4yBO8j5Uq/nvW0GehhoktwS6CgYFPmOVmUueQP8NYclo5kBbbCYmNGyG5MJZNDz1uaGaZbL3t2aNFt4sSBp94SENXvQnn4GVxfn8lkcmzooNrWEPtxtyFbOQdrEt/NaG5h6nGmRuKaa9Xl2jt0ipSr1/brwoMWta9y54Ox0GoYBUO6y/n5ehxgNcfPWd3oNO+qq1c8Xh5QxrykrPhv8GvQYvYXWSplflzHlCdQGIym0vEYzkuCipvNBvzN4ecPwiiamThEWG627GfCm+XZVbyQ+ThTI9YSLdFKrf9KTfbqQespvlk5w0dgqW+DbLvjUNmu0PYtc6f4stcgvnxlnsfOqg5oLbbuR4g2gAAOgxkllZH1oUhlZl6SOvVm7fFZLnWkSK3BC0LyA1GcHmVej1I+sZkuFjZNXVTGQ+xm9aZ7TM2LjhAXn6kH7gsmhns+t6yWJBJvu8Ct2WFr1glW0jl0HBC/HSVFSS29ELv1C8dqCzTY+sOgQJPmtIKzhitvnKPE3pgNv/dItnt8k2eFENjZlAvaEMUJqlYj9ii4xtM3juo+C8swLlUpaL6nyuwROFVntdTUAAGzN5Y4JolXd4AFo9FcuTYWlNMGq7EcIP/GiTAQzhcBrdDXNAIhitW9RiX4ngh+DPf4vCFt/Ap+jE+jlBpXk7GaaUyEVAG3hu5PhozMwXTVNJxJtxdUEZ1nrZdRwXILIIqtyuSscUDIXlEMu0BzTrBCkRZx+XUfJ1Cg+Y615aL1+2gDZcTHxzWHypUzwgCKqNl/ZM8GC3M1F44YXfXMn7eJO+sLuE2u5BVnqngHXqCQZwRG8UwXpxOy0OhrU31xr7RYQiT4LABz5EbL6bb8AYVWb8PaXt/8u/+vRUcOsq893ee6ylHzuxnwJnRL0K3Gcc5qRGcHqWBGpjinLCzUUP22NyrLYaRrHjd+9XDxbzz5+mF/89Ycfn14lv80uFuv+6OUSi7QTfZlqDa/GqTjpjxAOqd2N7k5PHd40btfDwcCG1m+FFYeptBq0vb1RJAUtQo20acYkFD7hAtF8YorQHtWwVDOhv6r/2r7hyw2lsW81zYF8l0VhbfElVogn0FE5PbeptryQExNlNkkJoyQd1cKqJlqNgce1t8w/FwIz6L2ecMZMy6joM/eZwqtcqyOTslaJKNgEe4Dsv80H7ZMX4h8+jWb5ts/jL+B58coHNBYe3W/+4tJ3Pzy/ukZP31+6jx/4XFJ+t4YeCwmht5WGVr2mTXdGsgcj0xZxAqGy941PLtFquv43FElOfToftM9dBWfnebPO4K0s6PmNa4W7m5PWTjB0znry0/h0/PgsTnJNly7NPUFZQvPGHWuT0PJNdN8Vu3hgtozZALVt0U7rpNxYwycX11u3xWn19TDziaFU8xH5TJKiczKTrJCKiPMVZ1Rx8XCFaWM420ktBN1KJ3A/YSmoVejjh8tWoh5OPuc4uXkoSVIIqjYPJ95093dvV4oV8FZvAel4ccAsXmQEi6tE8Cz7YL4ePocW7aTWlzdOq36pUeiJzm01vA5K9Ydx2oIblyoCLBekrbznrkdvafU22+cP8KG/vEBaf5JE1eK0Yyh9tFC84lDGtvXk+z2AX14YFEMt27sz13wN+OWFS23SkiJKqLf8hTDnviRJK2nzjOMd7aSLGiUlQnAZCugQa503/45vMbqlQhU487Ow4oTLRBSzidysZjybKL0nJoquyF2NA73HhSRQIhJRhiRJOEulaVxrC0oaWhDQEvGe1QiHuNcvQHgPuk21s210rwm+mQgylxPrFAX675Dya02zzCEEqcQIZKCypqn0BtUVJilwlpFsIohMMPtSVHvzvcJQDQBl9JbY3CJwxmbEdE2uchqk4nnedJr51/1YyknBMo7TLzUSgw34hcEFCBDRc/aTvAA6210xEaHck0bX9ebi/UfD45ZfiJhzAVdclSiMkNguslE9Sjw+yWjrRPcciP5TGwQvFDTng+xKyOSMDcATLBv5Fai0HQQ9IlEnlYLg7EuQeQ13GiTDuebXGtFQnsqWuTbu3/KUArMFWifAPR5lVC7jLv2/364momAtW7B9IH2iQKgrCfXvf31jqTEVn+xuG5k2cgBec7lRubsu90xgiZzAXc9ES5k24bEz5S+xmOFFMJsWq71h0ljtMsSERsnIWgTC6eJoPvQUaxIU5zfQJgiIsnR20qXwIp4+tFPozcsLCLIxR++iBeWS4IPdGr0iOIdWKUlZFs2tC/19sC6rv5nczFqFerO6bk8yUbl59eABj2b8G5rxRv/hkCR9Mt0ZSR8lhOXgvIMYP3ZiQeKZdjss3LssdSF3EA+fJEWOWbL5468gLB6fQ+iHN4I/wHK2zun21d3wgi0Oub7/qQH+g6/wpj6GP8Aad8xrnLoqGEfcthcGP7oySZwZX4B/onnBUeeB5jpV16arnLN6+G6I7jVfVO+Fnp3K68PHZJyMV+M3ROFnWOELQbAicEFkO5CFX7YdXFHPTZ0ic3TFADa5v8tPA0zTtVeOzBK+vGh3d8VdXbFdGN8tpcxmTQMlpKWOqYuKjsitUptYNwPdDo6wWs4JvyViSXDasa5tzBVb6QBRuXEyvg4DZ2s7x/zu4uJAw33e1sqwwv/p7OT0p+OTJ8dnP1+fnpyfPDk/fTz6+dGjXz9dvn3xDv36ydyUGhBjS8QYanz/ij7dTv7678u///VX9Mk0EYT72CfjR+OTYw13fPJkfPbk108nv4JK+Onx+IeV/HUE/5isaJZR+ekx/Fsrzkuq5KfTnx8/+kE/2uREfvp1ZCpfwV+ABLhm+vQfH59/+M/J9avnbycvnl9fvCphwG2p/HSq34c2U5/++29HQO3fjs7/+29HK6yS5QRnmfnnjHOp/nZ0fjo++d///d9fR/vIGwjrFt3CZmELMLRxQ3Sy50SFq7ddxOgJ7qAElHSqSj3d+uiruvVt9D06OVnJGCm1jIOSDr2KXYTo34dsjfYhA590oLpSWFHYDUPwtYzL48UulCaoQ7/VhrPOyAPHDCw+qfdtiImG7nUdsEkGzBL5rASeBP0NY+Q916+5LoVewN0B1skTNNu2A+wFypB529iqLRQ8Phu4GZ1066LBmGVUHRSpEYdb0ZrOSKmJNWkj4GwYAYIXitZO6BD3B/NG2zLLk9NX/3X2H/928/Pf148XaoFfKDZse9COA/kyPYjU2SIBrju2fsqTLlyu7B7OBf+88aLK7JOWeDL7a3ckWQUUDY8ha2gmc8GZIiyth0wGUPxbNPcBus8FyqDhHBEPbEBDGb0BvfCMD9qGY1RBMJFugDOc3Awhwr4fpWGNJZLEVjBUHK0w82pDMueA417dmQhF5ofeBGldzRWxUdwL7/BQGsKinSvNhl9jqsrLoyCCPsBrtr27ufJFnvXiWjiuoPItFpQXUguKgjSrdYHC2qDIi1nS4A5Gk0tsCZeCSIVnGTUNEkxoPNNGdN3e7KIYbNaJCDX5CJH1CkQQYbSiyrKLl9MJNbZs0h80KTJvjXsSBFMGk343KzmIDrfD7Lx/jXUc2Z4qkGBFVNXOb/sQ7G7sMZnV6trgEJfbsSaCeCLJFniAQEZb3NirQwWI+hLnpvbuqbOYvpdokfGZOfsH0EkHSFgjVSEz1fWeCyX8VpkO6c+TZqZzgPI55Jbbl1xy7WyDXj19DychZdAWC6I36+nUnvLYZJi63hrVNMMVWpISbdh1W1vuzV1FxIoyGyNSa1QfwL3gLKX20oeU+W76MICC0yR8TlhK0shsrmJNcruGoz8wgVzBqa0ZqqzMcv/64j3iAqqfPeg6A1rlfplx40QT5DtAcrz3NUTn3ZZsHEke62uvhzGCt50xq/Utl3CW2N7/Pm08IKq5InqlDGPW3bWxzYYiutXhiCyX8YBUWqFyACKXmKVZVfnYKWkHpLWhEOxKqul+a9mSB7L/gOTaU66L3rc+pe4ktd8h8jnXth1L3KRSWVEFZIqNDRSzX9f12u30tlbLCC2uaPc2qyel3FVHaAacDnXE1QKYO28zWotx2GxORhUtq3FoURcqK9aQqvV3RegyWAsq0S3FqGD0M5I8uSFqZP8LDUH079S2bG0UWyrjrHitD7OZFb+5iPljWozYHvvw1b1ILW0jqeIN2uswDUQncVm8OHekMHc3HP1FA0xKpLInYhsbPate8Z1Fe/DLwKn1aBzXPm3hwP7waKSsdT29dXCs7+CUVrMFxvHaX4dMY62nsHYd1p2pq20zXNsOC8LHHXB6JlwOQtYBaUs+5QA0UQjb81kHYGgDsi2Dd8hcRUH0S/AcPpIGoNI3plTrvnqfEW1J4DT1n/cVPVXwXkRkuLLF7UeXDZY3jR9LP0NQqjkidYbdGmsrpJCxGQ5IAaTmXciE1dpGIVjd+9GhO0RmwmMmnKtCkHSScH5DB9bNeQe/4AwdaWB/htoJR7bHqy3WYFQNHCggS5zapumA09kZbmbHPSleEpwSMbAQwmsqoQSC/biEVicCpQVxM2wkcGVgHtmPqpcNtCNYJ7KyQdO+BRBfnsAgjDJqMyGoP582v92FTb8og1idfgmZhZbNsWMTKMJClWw2YP4qfGJyr/qxiXn3wFzi8Qleu8zUSUYbESA1F4ANGPa5BOmvfIefqdanljwdle9glgZ18ms9WDuI7iAdvJ3GsJt0V6ExN4fe1AuywhQ4pHRXWBth5EwK6dWFiXpJXWC139zd1GSZbVS943eY8Qoxbe4uwb1dSoTq9iA2O9vlMswLuPI12/NCTVKs8LYpGuoOrq5ApDb9MZoXWRaecyOoPQ/Klf5SU7H/mA44jJBms05luTp74NwPhjDj6eaB13/eW29/gYeMshxh0qrPaIMWQu3AINjHhKqlLdXmsiVgq+8ExzYEThKSq5Dhk4wHOlDLRdQfgkp7vUsTyhbYu929hActl7vmx+673RJifB0HlQdJyazYq1RjW28eOxCAP6gs7Bwn0E4yug92yhW4MsmnUMALqyoaVEtOS6a9U9haLdYVmD0ccbG2qEcwa0cjdMS4ognRf/OjZkboaI0Fo2xxhCJl5I8SQRVNcHb0tevKlhgx3SM/eiuTafDfeOyfnMcgz6s4jBstzmYWwzdO+yfjNHeQU+mf4pdX/es2X15elQkPctx2rNP25pwtVPt1khs4UFdE19005dM07NCGT0JKP1ZF7/5iPVbReLCKmefEijPQmrJHZ4fH/wtlKV9LtBW/M6FjCut+JJSVWiLKbItEoIrcQVtCDdYU4tF6Mi27pndk3MZD6w5AC/PiV6whypkXi+f2kPUXadusrNjf0kIg5qLak8oEXDOqqrAJvihpaqmVxiLUtMGspQneP2jvPiC7NIf/SKSb3RRS3sW8LTVr2y8xaheFMdAdvTnb4S6VysfOfxmBUNWpijfkaIdciGys/xYFBwkHtljLDnCbSQ+t97nDprbxeVCrYoc7Lv1dvdSlL+C7usxuvdJqYYTOFpc9WSEKo35ftcttnMVib1ba7pz8C7nOBqtbEMU+LWFzqXZYUf3ZOPptwCvDul/u2U8yRi0KeNDQM26BU1njXa3xemOJgymRdHa4648kCqaUA50dHHsjiYNxSCLcswOOKJQyfba9g2JvBFyO50WWxataV4i2NEYcgq6bAbZ2ORyEqpMNtrUsHIKpe/q2NSHsjykGqS0eCO0lVXpWhO8mvV94DeofYrMT4i0Qt4Tb7ICyFdL20JsdsHUB2xaGswO6dlD9QnJ2H2FraM7e3enavBLD29N1a227G3bmbrCKSm1zCgD2VkV3N4eARQ6VknsY34ceuzWkto3dYj/w2C3yrWP/mt3+O4y7ONYy1/Tl8+vhBDmLFggzuFs6vbfYhTtPRYD544fXrf1mtlgge7gGS09El2cOS84m+VK0VcTdjxcMfGTgx0mA3K078IKBp9arnZlzngHKP2IDnm+diu2fb52Ke03Rt07F/4idiu012w2e3/jhMn/R/265aoPfqrausVs1Bw7tHyuzZ1NTQ2zGFxD22FsPVXRFpMKrgULWFUKFT6vQNIc+LuZjLZmrcha/PP3wtl45q991qgH8tSMFUCAWY6Xj9jpWL8qbeK8agG0Vque/rf80bnQG2XXwUAMeAA4iAbqkHupwR+gamq5S1sFvPU7TyLSgwwie2iyZHrFd84S2civqWrSeZCH0xia451hUzSU1de3kzIus3Rm1Dy3QJbLIMjc99dV0wprOMPOltXnQIq7Nj93BjSVE9A8rsA9a6PgvZs62FzuulxfYE++FzYcGsJobDSGtdmu9m69BbYr1134yDychcZahMr6QCku/x5571MJU7udutvLgooMzliX0tUdoOA37tD53wxviuzrsmVraa9Brmh3nWGjjTG+MGKIuZWJPq7VUJZx4tPhHLrFLGKsecpJe88Xjv5vXW7ZMqTgekEQDE3Fhj5h12RKt1gmvq9D8gRYuno8vCsZMso1G5RGoZ3cLeRlfTGAc/Xf7FhpvyMZ24c8KYsLFF6aYUUl7JNiiFHqNkqmDN1wTxLed9W1nffGd1b6rhlP3Aa9RWqxyt5busjGCpLxJB8/YgR2Nfqkog6ALt2p2l9yHY2y3ugr3ObpkeaHkCL2AXqNyhN4VSj/RPHXBU5K0ta7g/GZCWazM6O6O6OdQkReqjEC/Ehtr7lyUfaI1HV0Ms0YEwZ2RBci6qLLLmWOBW6JZh3P0lemyVbbJ90hKOJvThe2Ltp2gSfSQ2u/8Ov4/IWUBSeBMdtWODCmRA63rL1Y1XnG24OnM04ztk/5x6G/0B8/+bXsseoULDYlHD9VXD1sjIL2+Rnse4pGL3zYKYlRsSYnYxpz2m+oAjR3epR/tMnjcJuK6HVVbKHpRsMSmwCdYkQUX9HfbxGELcRfv3rx5+vbZQBJZY0f3UHzIZ7WVHMqowiw1dQYHERUD20fJsD6YTveVJ8Xc3tzI3zJvZ77ZXP3H6/77UqOCT8KdKZdcqImRJudIiaLNunXo0a7JIy0EoI4de/hQjZCQ4REbX9JTblS8CY0rlMOP3acQbW5G/sP4x/GZVbxdLQGjUdJ0jF5wYd+zoQQS5YJySKf3vmxggJmDvVpaHK6aIW259t9yHWCTtjoG2m1qfO37gAMakVt4WWMYxMqF7C5gGB+oQaa/NbVNEmhjk1ZNH1oiXnh39+c4Mv2Va1Pu7JwO1G4VaEvoSyO8oE8QQ6Nf+gEIMUkLWiCMD92XsKosUFGjdfjRXr0JM57c3Am9eMULm4IU0rzGFNr2W9tAE6Clz4xUYRVjDaEB1WjJVO41XsHXEtKaDiR6w8wfDb2qAmTV9o7NA9RooUgZOdRhEKFIJpj1I6jtFNyHGKhrWZ2RCt8QVsm46dXz6+rXaRdxzZSefrF7ZXuTFuFxyJn3ynpePiuZ3GK3+h5bUPbZ0/fe6n8P0/fgkx31PYce7aPvRQhAHfre3WQMV4TskDf8D5TgGJcdLq5tog2cKPntGUqMqDUXN+M5F2ssUpLWw3XvNv3sblLl/oDZjZ2ZGneZufbl8u/uPJWwPU2um1HakmXaOfJbQl4rkm8Jed8S8r4l5LVi6iVjvmXmtSD+lpn3LTNvH+1/uLf3wEEQpseQucG5T8aLsSFphFz5qQctt50Hsz3fl95YwhSdUyLQ/feXz1rwqgPavNa37NC2RUyXJTYPhvrC66CxBf3h3cLE7yrlDHsunYvCmfbvZNlXNQLUGtXkc86FqvwzUwtn2p2cUGFD+wclCiKLbHuJ184tulpx5jZofUwGPjJtoCVRfTfq4ZPX/BQo60VdYlWVaTJXJxDsEmcmnESOjj2IesEFoiwRUF4bZ1CueIRWWNxAmJJa2pq/VUkpnKYNdyEypZ1W/JakY3SpUIIZmhHo7cbn6Ai+ORqhI/vO0Uh/cCQZzuWSq5b6eEsu1aTaXYddCU9WOXkO9wJBRS3L5cYKRFS6OKlmWPtbLlY4yzYloGaeUmntMfoZvN4HEkUfQxen5S7gId89jyRliY06y3myHKOP0rrCE77KC+Xce9N/9TyiCc+KVct9Q4IzwlIsooMpdl4dGzEjiE2LLK//TYBKlrkWR3RFwAdvvGJ2v9slK/2dOZdqIUh4yf3ePBx80119t6P7M6AG7R6gEhJy1zEqdf9r2zS4P3+Yq266Ir/z7vL+7ah+t9KrRPtl7tN9dSouP5o3rNXVNk5XlA262Hahjg2wpSsJKzxrppFXOFcbE8k1GGUUcr8r/BdPr5++PvQFfhqLxeu6iqzoeXQyPhlEzjMXZMfnCA+9eKrwXj1//fziGv0Jvfjw7g2sofyXQXT8BxxwZYeNr1ypVpA0qFX7Qf+7RUbDb925Mw4c+uoZWYbYUlr2FJaHM9GuvaCZy2fuNDVUxZopVpfEhw6G1xBD/K6q6hhdBGrjdIWlImI6QlOZ4Vui/5IsaZZO0X19Mn949uLh03cv0FqY7hbw24NRTDedakWCMpJN+8cLHSovoTEsSBXRg7klYsYljMsUmJ6CXjy1RaVbaL2TzdiAesAQoysXQwRFtU3zz1uteupT3LDALcUIu4vBoO9yBaaz6dJqSO2ZXlfpqxVmKSIQVN5WP9cdGOOD1V9+BVPFFogqCLCBruOGBqv/Grogyj4R3fHsB5UeldToOKxuyAFLsmusN2QTmmRuArQp2r04WBwymxXCisSi0IekNK214kQlOMs0SfZEkxupyMo70q7gQX+7wwDY0d6IFQONTUJKYmN/ZT90Cw/Qqors1s63gZmmqP/UIZvaUCTo7QwmqhmIHJkeQkWWVazyW4EzbYunKOXQEkNDAFmIjctE2tYBpUsHLuNtdSyWepprShKaEtfO3YRtKa7ft5SXgs0tDNonFCW2OqgrFqUIKg7vn2RLWfEZoFaR8l888hiaQOG0okrT013FoqW4bc/oTeCJHbDmgi8EXu2uOu2M+KCi+H0lix1h4EaUroTHdoIOr0T0yj/YL0oYxEgVIFv5Sk0ciESKbytvLuuX8zuXC7E70UqmRAuZq6tXetyUGapkv9IhXXmUfYqWLEkdcV3jPHoKrb6MC/YFplnpgb1ktzij6dHYeyeCY0UwkwgjWUCo27zIDLpxBcG+U3amhGWi0jbDM1llZV20CAojSMclfXV41RCxUmSVK2h6OYeX6/PcGZM1YEr1NtJ2g600Z+sM1ic3x1Lqo/QIZjQvZhlNbsjmqI2qxjW8Y8LID71IrQpz1mLJw/nSyskKN6uJlcqs4HneDMY7OH16ZisN3y6xtgx4Tphps7FakZRiRbKNo6qN6EipzQ7ZOoxgKLi515RKumBYFaLJ8L3oKD+v9f83PKZVuDbEsWiPLlnXg6DBtQ+ndkvrXTSm+bStBOLhiyDGyyC2R7UMiGvZXsdpQJki1q8gYr9AjbujjKoGn6He4Sp3RpZB2zlb26OFDkbd9jKSvUKJ+pSSHDBffctJDonOOdiUNcooxuiRRcrvUGMzelqZauViIDTWqbPqB2pxtWgj86d02INa9PbdNVzMFilv9tnueTYEMSAaWoKlOaI02NIj0a0gqUYHvZ7Yr6//0zsUA4y0zS/jHdrrHZWyxJb2SqkgieJiswcRERPEWyfB+Y66uMJiQZQ1U7jnJKoTKNdUJctINIGXQL+KHW/9pqrmwAQXqyZhi4Wk6cZp3Fq90z1nEe+47aKnT6+JgoWCg2VGKFuY+JZWpmnY8b21zS70l89aFbmDI4RF7MC45FtmsgWu/g7NeZZ6ETWMrI2nrk0/XpJIFcgeyFIyx0WmDIAOdFEWhxn4KjzuMH9xJvcVJz1LQMgd8FwrAZXHKoLec8neVTa7Ae25a/f2kG7LAvq+CqP6Pgr4zvp7xb2c2+BaT2J7hlubD3M7yPqXfZyQ7VBrca9KYDKnN94Ny7V5Miy0y360vcBQhQ/tc3EQxYe+SharI2WHPNY7aDVz0a/NTHcW585XfJU2AMWv1kvC0AxLmtSdgVRGnAw9kkH/GbuhfM3GNF+7E8s/UKY36ptYu2/vGAO65da+NQ32YEVKYY+bkG7T4XUc9UBGDUTzWZtbknHluSa5gAftYmKHvN8hI7bD/VgN13hgDzXawAm7U+eZLVnKB+04ky83kiY4s0g7CuV3ZrVGVeDeBAFsJ7AcZRU/dhDVmf+6J1Ea9i5EdedM7716AH4XujpTGdvJqkoJLkXMCN6J7frQ25GzfdAtwHMiTK0iezXTQdGW5O472AbDqPvS+2EQdTsy4N0u6baE85amG5Sl5PM5muOskQLQk+Z3roizd/CawKwZmXNBSjtstkGULYhUx/rNY/NmvfAs2jmpve/Z+a2524BZQ9+au/Wdom/N3Tro+MM2d4tTAmbvBLj4gEalVzrPYJBR9HPBmSIsbfd/7BbC5+9hhwOETtyyxcmNJqLNqbCFhrj7RZRtHCx4e8PnHA0U3FambNi9/z8AAP//eicJHQ==" + return "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" } diff --git a/filebeat/module/system/_meta/fields.yml b/filebeat/module/system/_meta/fields.yml index 87f33ac8a95..5811e5279ff 100644 --- a/filebeat/module/system/_meta/fields.yml +++ b/filebeat/module/system/_meta/fields.yml @@ -13,6 +13,18 @@ qualified domain name, or a name specified by the user. The sender decides which value to use. + - name: group.id + type: keyword + required: false + description: > + ID of the group. + + - name: group.name + type: keyword + required: false + description: > + Name of the group. + - name: system type: group description: > diff --git a/filebeat/module/system/auth/_meta/fields.yml b/filebeat/module/system/auth/_meta/fields.yml index 92fe1689e29..67192d39d4e 100644 --- a/filebeat/module/system/auth/_meta/fields.yml +++ b/filebeat/module/system/auth/_meta/fields.yml @@ -4,85 +4,70 @@ Fields from the Linux authorization logs. fields: - name: timestamp - description: > - The timestamp as read from the auth message. + type: alias + path: '@timestamp' - name: hostname - description: > - The hostname as read from the auth message. + type: alias + path: host.hostname - name: program - description: > - The process name as read from the auth message. + type: alias + path: process.name - name: pid - type: long - description: > - The PID of the process that sent the auth message. + type: alias + path: process.pid - name: message - type: text - description: > - The message in the log line. + type: alias + path: message - name: user - description: > - The Unix user that this event refers to. + type: alias + path: user.name - name: ssh type: group - description: > - Fields specific to SSH login events. fields: - - name: event - description: > - The SSH login event. Can be one of "Accepted", "Failed", or "Invalid". "Accepted" - means a successful login. "Invalid" means that the user is not configured on the - system. "Failed" means that the SSH login attempt has failed. - name: method description: > The SSH authentication method. Can be one of "password" or "publickey". - - name: ip - type: ip + - name: signature description: > - The client IP from where the login attempt was made. + The signature of the client public key. - name: dropped_ip type: ip description: > The client IP from SSH connections that are open and immediately dropped. + + - name: event + type: alias + path: event.action + - name: ip + type: alias + path: source.ip - name: port - type: long - description: > - The client port from where the login attempt was made. - - name: signature - description: > - The signature of the client public key. + type: alias + path: source.port + - name: geoip type: group - description: > - Contains GeoIP information gathered based on the `system.auth.ip` field. - Only present if the GeoIP Elasticsearch plugin is available and - used. fields: - name: continent_name - type: keyword - description: > - The name of the continent. - - name: city_name - type: keyword - description: > - The name of the city. - - name: region_name - type: keyword - description: > - The name of the region. + type: alias + path: source.geo.continent_name - name: country_iso_code - type: keyword - description: > - Country ISO code. + type: alias + path: source.geo.country_iso_code - name: location - type: geo_point - description: > - The longitude and latitude. + type: alias + path: source.geo.location + - name: region_name + type: alias + path: source.geo.region_name + - name: city_name + type: alias + path: source.geo.city_name - name: region_iso_code - type: keyword - description: > - Region ISO code. + type: alias + path: source.geo.region_iso_code + - name: sudo type: group description: > @@ -111,17 +96,6 @@ description: > Fields specific to events created by the `useradd` command. fields: - - name: name - description: > - The user name being added. - - name: uid - type: long - description: - The user ID. - - name: gid - type: long - description: - The group ID. - name: home description: The home folder for the new user. @@ -129,15 +103,24 @@ description: The default shell for the new user. + - name: name + type: alias + path: user.name + - name: uid + type: alias + path: user.id + - name: gid + type: alias + path: group.id + - name: groupadd type: group description: > Fields specific to events created by the `groupadd` command. fields: - name: name - description: > - The name of the new group. + type: alias + path: group.name - name: gid - type: long - description: > - The ID of the new group. + type: alias + path: group.id diff --git a/filebeat/module/system/auth/ingest/pipeline.json b/filebeat/module/system/auth/ingest/pipeline.json index 618c3b4e74d..297167d3f28 100644 --- a/filebeat/module/system/auth/ingest/pipeline.json +++ b/filebeat/module/system/auth/ingest/pipeline.json @@ -1,53 +1,72 @@ { - "description": "Pipeline for parsing system authorisation/secure logs", - "processors": [ - { - "grok": { - "field": "message", - "ignore_missing": true, - "pattern_definitions" : { - "GREEDYMULTILINE" : "(.|\n)*" + "description": "Pipeline for parsing system authorisation/secure logs", + "processors": [ + { + "grok": { + "field": "message", + "ignore_missing": true, + "pattern_definitions" : { + "GREEDYMULTILINE" : "(.|\n)*" + }, + "patterns": [ + "%{SYSLOGTIMESTAMP:system.auth.timestamp} %{SYSLOGHOST:host.hostname} sshd(?:\\[%{POSINT:process.pid:int}\\])?: %{DATA:event.action} %{DATA:system.auth.ssh.method} for (invalid user )?%{DATA:user.name} from %{IPORHOST:source.ip} port %{NUMBER:source.port:int} ssh2(: %{GREEDYDATA:system.auth.ssh.signature})?", + "%{SYSLOGTIMESTAMP:system.auth.timestamp} %{SYSLOGHOST:host.hostname} sshd(?:\\[%{POSINT:process.pid:int}\\])?: %{DATA:event.action} user %{DATA:user.name} from %{IPORHOST:source.ip}", + "%{SYSLOGTIMESTAMP:system.auth.timestamp} %{SYSLOGHOST:host.hostname} sshd(?:\\[%{POSINT:process.pid:int}\\])?: Did not receive identification string from %{IPORHOST:system.auth.ssh.dropped_ip}", + "%{SYSLOGTIMESTAMP:system.auth.timestamp} %{SYSLOGHOST:host.hostname} sudo(?:\\[%{POSINT:process.pid:int}\\])?: \\s*%{DATA:user.name} :( %{DATA:system.auth.sudo.error} ;)? TTY=%{DATA:system.auth.sudo.tty} ; PWD=%{DATA:system.auth.sudo.pwd} ; USER=%{DATA:system.auth.sudo.user} ; COMMAND=%{GREEDYDATA:system.auth.sudo.command}", + "%{SYSLOGTIMESTAMP:system.auth.timestamp} %{SYSLOGHOST:host.hostname} groupadd(?:\\[%{POSINT:process.pid:int}\\])?: new group: name=%{DATA:group.name}, GID=%{NUMBER:group.id:int}", + "%{SYSLOGTIMESTAMP:system.auth.timestamp} %{SYSLOGHOST:host.hostname} useradd(?:\\[%{POSINT:process.pid:int}\\])?: new user: name=%{DATA:user.name}, UID=%{NUMBER:user.id:int}, GID=%{NUMBER:group.id:int}, home=%{DATA:system.auth.useradd.home}, shell=%{DATA:system.auth.useradd.shell}$", + "%{SYSLOGTIMESTAMP:system.auth.timestamp} %{SYSLOGHOST:host.hostname}? %{DATA:process.name}(?:\\[%{POSINT:process.pid:int}\\])?: %{GREEDYMULTILINE:system.auth.message}" + ] + } }, - "patterns": [ - "%{SYSLOGTIMESTAMP:system.auth.timestamp} %{SYSLOGHOST:system.auth.hostname} sshd(?:\\[%{POSINT:system.auth.pid}\\])?: %{DATA:system.auth.ssh.event} %{DATA:system.auth.ssh.method} for (invalid user )?%{DATA:system.auth.user} from %{IPORHOST:system.auth.ssh.ip} port %{NUMBER:system.auth.ssh.port} ssh2(: %{GREEDYDATA:system.auth.ssh.signature})?", - "%{SYSLOGTIMESTAMP:system.auth.timestamp} %{SYSLOGHOST:system.auth.hostname} sshd(?:\\[%{POSINT:system.auth.pid}\\])?: %{DATA:system.auth.ssh.event} user %{DATA:system.auth.user} from %{IPORHOST:system.auth.ssh.ip}", - "%{SYSLOGTIMESTAMP:system.auth.timestamp} %{SYSLOGHOST:system.auth.hostname} sshd(?:\\[%{POSINT:system.auth.pid}\\])?: Did not receive identification string from %{IPORHOST:system.auth.ssh.dropped_ip}", - "%{SYSLOGTIMESTAMP:system.auth.timestamp} %{SYSLOGHOST:system.auth.hostname} sudo(?:\\[%{POSINT:system.auth.pid}\\])?: \\s*%{DATA:system.auth.user} :( %{DATA:system.auth.sudo.error} ;)? TTY=%{DATA:system.auth.sudo.tty} ; PWD=%{DATA:system.auth.sudo.pwd} ; USER=%{DATA:system.auth.sudo.user} ; COMMAND=%{GREEDYDATA:system.auth.sudo.command}", - "%{SYSLOGTIMESTAMP:system.auth.timestamp} %{SYSLOGHOST:system.auth.hostname} groupadd(?:\\[%{POSINT:system.auth.pid}\\])?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}", - "%{SYSLOGTIMESTAMP:system.auth.timestamp} %{SYSLOGHOST:system.auth.hostname} useradd(?:\\[%{POSINT:system.auth.pid}\\])?: new user: name=%{DATA:system.auth.useradd.name}, UID=%{NUMBER:system.auth.useradd.uid}, GID=%{NUMBER:system.auth.useradd.gid}, home=%{DATA:system.auth.useradd.home}, shell=%{DATA:system.auth.useradd.shell}$", - "%{SYSLOGTIMESTAMP:system.auth.timestamp} %{SYSLOGHOST:system.auth.hostname}? %{DATA:system.auth.program}(?:\\[%{POSINT:system.auth.pid}\\])?: %{GREEDYMULTILINE:system.auth.message}" - ] - } - }, - { - "remove": { - "field": "message" - } - }, - { - "date": { - "field": "system.auth.timestamp", - "target_field": "@timestamp", - "formats": [ - "MMM d HH:mm:ss", - "MMM dd HH:mm:ss" - ], - {< if .convert_timezone >}"timezone": "{{ beat.timezone }}",{< end >} - "ignore_failure": true - } - }, - { - "geoip": { - "field": "system.auth.ssh.ip", - "target_field": "system.auth.ssh.geoip", - "ignore_failure": true - } - } - ], - "on_failure" : [{ - "set" : { - "field" : "error.message", - "value" : "{{ _ingest.on_failure_message }}" - } - }] + { + "remove": { + "field": "message" + } + }, + { + "rename": { + "field": "system.auth.message", + "target_field": "message", + "ignore_missing": true + } + }, + { + "set": { + "field": "source.ip", + "value": "{{system.auth.ssh.dropped_ip}}", + "if": "ctx.containsKey('system') && ctx.system.containsKey('auth') && ctx.system.auth.containsKey('ssh') && ctx.system.auth.ssh.containsKey('dropped_ip')" + } + }, + { + "date": { + "field": "system.auth.timestamp", + "target_field": "@timestamp", + "formats": [ + "MMM d HH:mm:ss", + "MMM dd HH:mm:ss" + ], + {< if .convert_timezone >}"timezone": "{{ beat.timezone }}",{< end >} + "ignore_failure": true + } + }, + { + "remove": { + "field": "system.auth.timestamp" + } + }, + { + "geoip": { + "field": "source.ip", + "target_field": "source.geo", + "ignore_failure": true + } + } + ], + "on_failure" : [{ + "set" : { + "field" : "error.message", + "value" : "{{ _ingest.on_failure_message }}" + } + }] } diff --git a/filebeat/module/system/auth/test/test.log-expected.json b/filebeat/module/system/auth/test/test.log-expected.json index 1d56b19e1da..22e4623a121 100644 --- a/filebeat/module/system/auth/test/test.log-expected.json +++ b/filebeat/module/system/auth/test/test.log-expected.json @@ -1,148 +1,143 @@ [ { "@timestamp": "2018-02-21T21:54:44.000Z", + "event.action": "Accepted", "event.dataset": "auth", "event.module": "system", + "host.hostname": "localhost", "input.type": "log", "log.offset": 0, - "system.auth.hostname": "localhost", - "system.auth.pid": "3402", - "system.auth.ssh.event": "Accepted", - "system.auth.ssh.ip": "10.0.2.2", + "process.pid": 3402, + "source.ip": "10.0.2.2", + "source.port": 63673, "system.auth.ssh.method": "publickey", - "system.auth.ssh.port": "63673", "system.auth.ssh.signature": "RSA 39:33:99:e9:a0:dc:f2:33:a3:e5:72:3b:7c:3a:56:84", - "system.auth.timestamp": "Feb 21 21:54:44", - "system.auth.user": "vagrant" + "user.name": "vagrant" }, { "@timestamp": "2018-02-23T00:13:35.000Z", + "event.action": "Accepted", "event.dataset": "auth", "event.module": "system", + "host.hostname": "localhost", "input.type": "log", "log.offset": 152, - "system.auth.hostname": "localhost", - "system.auth.pid": "7483", - "system.auth.ssh.event": "Accepted", - "system.auth.ssh.ip": "192.168.33.1", + "process.pid": 7483, + "source.ip": "192.168.33.1", + "source.port": 58803, "system.auth.ssh.method": "password", - "system.auth.ssh.port": "58803", - "system.auth.timestamp": "Feb 23 00:13:35", - "system.auth.user": "vagrant" + "user.name": "vagrant" }, { "@timestamp": "2018-02-21T21:56:12.000Z", + "event.action": "Invalid", "event.dataset": "auth", "event.module": "system", + "host.hostname": "localhost", "input.type": "log", "log.offset": 254, - "system.auth.hostname": "localhost", - "system.auth.pid": "3430", - "system.auth.ssh.event": "Invalid", - "system.auth.ssh.ip": "10.0.2.2", - "system.auth.timestamp": "Feb 21 21:56:12", - "system.auth.user": "test" + "process.pid": 3430, + "source.ip": "10.0.2.2", + "user.name": "test" }, { "@timestamp": "2018-02-20T08:35:22.000Z", + "event.action": "Failed", "event.dataset": "auth", "event.module": "system", + "host.hostname": "slave22", "input.type": "log", "log.offset": 324, - "system.auth.hostname": "slave22", - "system.auth.pid": "5774", - "system.auth.ssh.event": "Failed", - "system.auth.ssh.geoip.continent_name": "Asia", - "system.auth.ssh.geoip.country_iso_code": "CN", - "system.auth.ssh.geoip.location.lat": 23.1167, - "system.auth.ssh.geoip.location.lon": 113.25, - "system.auth.ssh.geoip.region_iso_code": "CN-GD", - "system.auth.ssh.geoip.region_name": "Guangdong", - "system.auth.ssh.ip": "116.31.116.24", + "process.pid": 5774, + "source.geo.continent_name": "Asia", + "source.geo.country_iso_code": "CN", + "source.geo.location.lat": 23.1167, + "source.geo.location.lon": 113.25, + "source.geo.region_iso_code": "CN-GD", + "source.geo.region_name": "Guangdong", + "source.ip": "116.31.116.24", + "source.port": 29160, "system.auth.ssh.method": "password", - "system.auth.ssh.port": "29160", - "system.auth.timestamp": "Feb 20 08:35:22", - "system.auth.user": "root" + "user.name": "root" }, { "@timestamp": "2018-02-21T23:35:33.000Z", "event.dataset": "auth", "event.module": "system", + "host.hostname": "localhost", "input.type": "log", "log.offset": 420, - "system.auth.hostname": "localhost", "system.auth.sudo.command": "/bin/ls", "system.auth.sudo.pwd": "/home/vagrant", "system.auth.sudo.tty": "pts/0", "system.auth.sudo.user": "root", - "system.auth.timestamp": "Feb 21 23:35:33", - "system.auth.user": "vagrant" + "user.name": "vagrant" }, { "@timestamp": "2018-02-19T15:30:04.000Z", "event.dataset": "auth", "event.module": "system", + "host.hostname": "slave22", "input.type": "log", "log.offset": 522, - "system.auth.hostname": "slave22", - "system.auth.pid": "18406", - "system.auth.ssh.dropped_ip": "123.57.245.163", - "system.auth.timestamp": "Feb 19 15:30:04" + "process.pid": 18406, + "source.geo.continent_name": "Asia", + "source.geo.country_iso_code": "CN", + "source.geo.location.lat": 34.7725, + "source.geo.location.lon": 113.7266, + "source.ip": "123.57.245.163", + "system.auth.ssh.dropped_ip": "123.57.245.163" }, { "@timestamp": "2018-02-23T00:08:48.000Z", "event.dataset": "auth", "event.module": "system", + "host.hostname": "localhost", "input.type": "log", "log.offset": 617, - "system.auth.hostname": "localhost", "system.auth.sudo.command": "/bin/cat /var/log/secure", "system.auth.sudo.pwd": "/home/vagrant", "system.auth.sudo.tty": "pts/1", "system.auth.sudo.user": "root", - "system.auth.timestamp": "Feb 23 00:08:48", - "system.auth.user": "vagrant" + "user.name": "vagrant" }, { "@timestamp": "2018-02-24T00:13:02.000Z", "event.dataset": "auth", "event.module": "system", + "host.hostname": "precise32", "input.type": "log", "log.offset": 736, - "system.auth.hostname": "precise32", "system.auth.sudo.command": "/bin/ls", "system.auth.sudo.error": "user NOT in sudoers", "system.auth.sudo.pwd": "/home/vagrant", "system.auth.sudo.tty": "pts/1", "system.auth.sudo.user": "root", - "system.auth.timestamp": "Feb 24 00:13:02", - "system.auth.user": "tsg" + "user.name": "tsg" }, { "@timestamp": "2018-02-22T11:47:05.000Z", "event.dataset": "auth", "event.module": "system", + "group.id": 48, + "group.name": "apache", + "host.hostname": "localhost", "input.type": "log", "log.offset": 861, - "system.auth.groupadd.gid": "48", - "system.auth.groupadd.name": "apache", - "system.auth.hostname": "localhost", - "system.auth.pid": "6991", - "system.auth.timestamp": "Feb 22 11:47:05" + "process.pid": 6991 }, { "@timestamp": "2018-02-22T11:47:05.000Z", "event.dataset": "auth", "event.module": "system", + "group.id": 48, + "host.hostname": "localhost", "input.type": "log", "log.offset": 934, - "system.auth.hostname": "localhost", - "system.auth.pid": "6995", - "system.auth.timestamp": "Feb 22 11:47:05", - "system.auth.useradd.gid": "48", + "process.pid": 6995, "system.auth.useradd.home": "/usr/share/httpd", - "system.auth.useradd.name": "apache", "system.auth.useradd.shell": "/sbin/nologin", - "system.auth.useradd.uid": "48" + "user.id": 48, + "user.name": "apache" } ] \ No newline at end of file