logstash-codec-idmef 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ad1c943dcf4ab893042f3a2f1422dfa0a65ab106f70ea36f5b64c7588d5200bf
4
- data.tar.gz: eb60b7f7dbe4171f683a474f20ed3f11d0c694d63d5a195c03330c31ccae6810
3
+ metadata.gz: 687a8fdbf7434f7a0cc7062d44463550a7b6f5922bb41086fc01ccd8db0711a1
4
+ data.tar.gz: d3c65c530b4e8b74eca83a9c6ba3eaf1ba9293a22860ea256447407cd13e8f69
5
5
  SHA512:
6
- metadata.gz: f4f99f78a379d0feb60e3b05af8397eeb1fe7c840ac678c69a63edb7259cda2dce303825e33f75e5811506f39644a4db18986764fdb1b918db9302a9efc27f50
7
- data.tar.gz: 005b837b9f15b6e09bb321884e63f018ab2270dd1a94d4c2498f4c06bff3a870b6b54f261b4cda22946e68d42bec2e605f4b10ce04ad3269b3312511ca9fba78
6
+ metadata.gz: f416eeb9bc08f9d9c6c1d8241a3377ddb92fc47421f62053b5f1f791fb2a8f9b0683e0065c0630488724c23eb3dc9fafbab471acdf8a5c87843faccbb83cf970
7
+ data.tar.gz: bc4d4fba048ac2ece7058b86af575b4d5ee43217236834e0ab2d1f62b0fe0288a95d8654d0ba40efda50ec23ef7ad07cd3315afaad7095af8b390ba73d46973a
data/CHANGELOG.md CHANGED
@@ -1,2 +1,5 @@
1
+ ## 0.9.1
2
+ - Fix various DTD issues
3
+
1
4
  ## 0.9.0
2
5
  - Initial release
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  require "logstash/codecs/base"
3
3
 
4
+ require 'socket'
4
5
  require 'nokogiri'
5
6
  require 'json'
6
7
  require 'date'
@@ -253,7 +254,7 @@ class LogStash::Codecs::IDMEF < LogStash::Codecs::Base
253
254
  :name => "AdditionalData",
254
255
  "meaning" => { :type => :attr, :name => "meaning" },
255
256
  "type" => { :type => :attr, :name => "type" },
256
- "data" => { :type => :value }
257
+ "data" => { :type => :list_value, :name => :type }
257
258
  }
258
259
  # RFC 4765: CorrelationAlert Class
259
260
  IDMEFCorrelationAlert = { :type => :class,
@@ -328,7 +329,7 @@ class LogStash::Codecs::IDMEF < LogStash::Codecs::Base
328
329
  value = v
329
330
  end
330
331
  end
331
- if value.kind_of?(Array)
332
+ if value.kind_of?(Array) or value.to_s.empty?
332
333
  next
333
334
  end
334
335
  if value.kind_of?(String)
@@ -373,20 +374,15 @@ class LogStash::Codecs::IDMEF < LogStash::Codecs::Base
373
374
  if rfc[name][:format] == :datetime
374
375
  value = DateTime.parse(value.to_s).strftime("%FT%T%:z")
375
376
  end
376
- no = Nokogiri::XML::Node.new(rfc[name][:name], doc)
377
+ n = rfc[name][:name] == :type ? curr["type"] : rfc[name][:name]
378
+ no = Nokogiri::XML::Node.new(n, doc)
377
379
  no.content = value.to_s
378
380
  curr << no
379
- curr = no
380
381
  elsif ne_t == :attr
381
382
  if rfc[name][:format] == :datetime
382
383
  value = DateTime.parse(value.to_s).strftime("%FT%T%:z")
383
384
  end
384
385
  curr[rfc[name][:name]] = value.to_s
385
- elsif ne_t == :value
386
- if rfc[name][:format] == :datetime
387
- value = DateTime.parse(value.to_s).strftime("%FT%T%:z")
388
- end
389
- curr.content = value.to_s
390
386
  end
391
387
  rfc.each do |kk, vv|
392
388
  if vv.respond_to?(:each_pair) && vv[:default] && vv[:type] == :attr && !curr[vv[:name]]
@@ -418,12 +414,11 @@ class LogStash::Codecs::IDMEF < LogStash::Codecs::Base
418
414
  @utf8_charset.logger = self.logger
419
415
 
420
416
  @local_paths = {
421
- "alert.classification.text" => ["$rule_name", "$event", "$message"],
422
- "alert.detect_time" => "$@timestamp",
423
- "alert.create_time" => "$@timestamp",
424
- "alert.analyzer_time" => "$@timestamp",
425
417
  "alert.analyzer(0).name" => ["$product", "$devname"],
426
418
  "alert.analyzer(0).manufacturer" => "$vendor",
419
+ "alert.create_time" => "$@timestamp",
420
+ "alert.detect_time" => "$@timestamp",
421
+ "alert.analyzer_time" => "$@timestamp",
427
422
  "alert.source(0).node.address(0).address" => ["$srcip", "$src"],
428
423
  "alert.source(0).node.name" => ["$shost", "$srchost", "$shostname", "$srchostname", "$sname", "$srcname"],
429
424
  "alert.source(0).service.port" => ["$spt", "$sport", "$s_port"],
@@ -436,6 +431,7 @@ class LogStash::Codecs::IDMEF < LogStash::Codecs::Base
436
431
  "alert.target(0).user.user_id(0).number" => ["$uid", "$dstuid", "$duid"],
437
432
  "alert.target(0).process.name" => ["$proc", "$process"],
438
433
  "alert.target(0).process.pid" => ["$dpid", "$pid"],
434
+ "alert.classification.text" => ["$rule_name", "$event", "$message"],
439
435
  "alert.assessment.impact.severity" => ["$severity", "$level"],
440
436
  "alert.assessment.action.description" => ["$action"],
441
437
  }
@@ -454,13 +450,14 @@ class LogStash::Codecs::IDMEF < LogStash::Codecs::Base
454
450
  # Copy event
455
451
  e = event.clone
456
452
 
453
+ # Set messageid and analyzerid
454
+ p = { "%s.messageid" % @type => java.util.UUID.randomUUID.to_s,
455
+ "%s.analyzer(0).analyzerid" % @type => Socket.gethostname.to_s
456
+ }
457
+ xml = idmefpaths_to_xml(e, p)
458
+
457
459
  # Set paths
458
- xml = idmefpaths_to_xml(e, @allpaths)
459
-
460
- # Set messageid
461
- if !@allpaths.key?("%s.messageid" % @type)
462
- xml = idmefpaths_to_xml(e, {"%s.messageid" % @type => java.util.UUID.randomUUID.to_s}, xml)
463
- end
460
+ xml = idmefpaths_to_xml(e, @allpaths, xml)
464
461
 
465
462
  # Set Additional data
466
463
  if @additionaldata
@@ -474,8 +471,8 @@ class LogStash::Codecs::IDMEF < LogStash::Codecs::Base
474
471
  t = "string"
475
472
  end
476
473
  p = { "alert.additional_data(%d).meaning" % idx => key,
477
- "alert.additional_data(%d).data" % idx => value.to_s,
478
474
  "alert.additional_data(%d).type" % idx => t,
475
+ "alert.additional_data(%d).data" % idx => value.to_s,
479
476
  }
480
477
  xml = idmefpaths_to_xml(e, p , xml)
481
478
  idx = idx + 1
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-codec-idmef'
4
- s.version = '0.9.0'
4
+ s.version = '0.9.1'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "Create IDMEF in XML"
7
7
  s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
@@ -9,7 +9,7 @@ describe LogStash::Codecs::IDMEF do
9
9
  context "encode IDMEF" do
10
10
  subject(:codec) { LogStash::Codecs::IDMEF.new }
11
11
 
12
- let(:expected_result) { %Q(<?xml version="1.0"?><idmef:IDMEF-Message xmlns:idmef="http://iana.org/idmef"><idmef:Alert messageid="67a63ad4-11b9-4ee2-8aee-d1c032a13b35"><idmef:Classification text="Login attempt"/><idmef:DetectTime>2020-05-24T09:05:26+00:00</idmef:DetectTime><idmef:CreateTime>2020-05-24T09:05:26+00:00</idmef:CreateTime><idmef:AnalyzerTime>2020-05-24T09:05:26+00:00</idmef:AnalyzerTime><idmef:Target decoy="unknown"><idmef:Node category="unknown"><idmef:name category="unknown">localhost.localdomain</idmef:name></idmef:Node></idmef:Target><idmef:AdditionalData meaning="@version" type="string">1</idmef:AdditionalData></idmef:Alert></idmef:IDMEF-Message>\n) }
12
+ let(:expected_result) { %Q(<?xml version=\"1.0\"?><idmef:IDMEF-Message xmlns:idmef=\"http://iana.org/idmef\"><idmef:Alert messageid=\"67a63ad4-11b9-4ee2-8aee-d1c032a13b35\"><idmef:Analyzer analyzerid=\"localhost.localdomain\"/><idmef:CreateTime>2020-05-24T09:05:26+00:00</idmef:CreateTime><idmef:DetectTime>2020-05-24T09:05:26+00:00</idmef:DetectTime><idmef:AnalyzerTime>2020-05-24T09:05:26+00:00</idmef:AnalyzerTime><idmef:Target decoy=\"unknown\"><idmef:Node category=\"unknown\"><idmef:name>localhost.localdomain</idmef:name></idmef:Node></idmef:Target><idmef:Classification text=\"Login attempt\"/><idmef:AdditionalData meaning=\"@version\" type=\"string\"><idmef:string>1</idmef:string></idmef:AdditionalData></idmef:Alert></idmef:IDMEF-Message>\n)}
13
13
  let(:results) { []}
14
14
 
15
15
  it "should return proper IDMEF XML from event" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-codec-idmef
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Prelude Team