I actually ended up writing two seporate decoders. While I'd like to see more variables pulled from the log line, I have enough to get connect, fail and succees rules.
In /var/ossec/etc/local_decoder.xml
<decoder name="kippo-connection">
<prematch>\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d\p\d\d\d\d \pkippo.core.honeypot.HoneyPotSSHFactory\p </prematch>
</decoder>
<decoder name="kippo-new-connection">
<parent>kippo-connection</parent>
<regex offset="after_parent">^New connection: (\d+.\d+.\d+.\d+):(\d+) \((\d+.\d+.\d+.\d+):(\d+)\) \psession: (\d+)\p</regex>
<order>srcip, srcport, dstip, dstport, extra_data</order>
</decoder>
<decoder name="kippo-connected">
<prematch>\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d\p\d\d\d\d \pSSHService ssh-userauth on HoneyPotTransport</prematch>
</decoder>
<decoder name="kippo-connected-login">
<parent>kippo-connected</parent>
<regex offset="after_parent">,\d+,(\d+.\d+.\d+.\d+)\p login attempt (\.+) (\w+)</regex>
<order>srcip, extra_data, status</order>
</decoder>
The first decoder matches the New Connection log line format with the child decoder matching the variables srcip, srcport, dstip, dstport and extra data.
The third decoder matches the connection attempt log line format with the child decoder matching srcip, extra data and status (was it failed or succeeded).
In /var/ossec/etc/ossec.conf insert kippo_rules.xml before local_rules.xml in the fules block
<rules>
...
...
<include>kippo_rules.xml</include>
<include>local_rules.xml</include>
</rules>
In /var/ossec/rules/kippo_rules.xml
<group name="syslog,kippo,">
<rule id="110010" level="0">
<decoded_as>kippo-connection</decoded_as>
<description>Kippo New Connection</description>
</rule>
<rule id="110011" level="5">
<if_sid>110010</if_sid>
<match>New connection</match>
<description>Kippo New Connection.</description>
<group>connection_attempt,</group>
</rule>
<rule id="110020" level="0">
<decoded_as>kippo-connected</decoded_as>
<description>Kippo Connected</description>
</rule>
<rule id="110021" level="5">
<if_sid>110020</if_sid>
<match>login attempt</match>
<regex>failed$</regex>
<description>Kippo Login Failed.</description>
<group>authentication_failed,</group>
</rule>
<rule id="110022" level="5">
<if_sid>110020</if_sid>
<match>login attempt</match>
<regex>succeeded$</regex>
<description>Kippo Login Succeeded.</description>
<group>authentication_success,</group>
</rule>
</group>
Rule 110010 catches the event from the kippo-connection decoder. Rule 110011 matches "New connection" from the log line and causes the level 5 alert so that Security Onion displays it in Sguil without causing an active response from Ossec. Additional rules for the kippo-connection log line could also be added.
Rule 110020 catches the event from the kippo-connected decoder. Rules 110021 and 110022 match failed and succeeded login attempts respectively. currently both also with a level 5 alert so Sguil displays them. Additional rules could also be added based on the connected log line format.
Really, I wasn't sure if decoded_as grouping had to be in the seporate grouping rule but it worked this way; catch the even off the decoder then activate the alert off a related child rule.
Posted here because I couldn't find compliete Kippo examples anywhere else.