-
Notifications
You must be signed in to change notification settings - Fork 418
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[ECS] Multiple users in an event proposal #809
Comments
Ping @MikePaquette @dainperkins @dcode @andrewstucki @leehinman @rw-access @marshallmain @janniten @willemdh @neu5ron @vbohata Let's have a virtual party! #socialdistancing :-) |
@webmat Really good and clear proposal! We are not using panw.panos contain |
i'm in :) |
Hi all! |
@janniten @leehinman Do you have insights you could share about the semantics of using I may not have made this explicit enough in the
So I'm wondering if we should deprecate those, or clarify differences in semantics. @janniten I'd like to see Fortinet events samples, if you can share any. Looking at the Beats PANOS logs, it looks like it's only populating the |
@webmat Just checked our panw logs and about 1/4 of the logs containing This depends on what the user-id agents saw as the last logon to the destination IP. |
Hi @webmat, I think the case "3. User A assumes the identity of User B (or fails to)" Attached, some Fortinet logs samples |
@webmat I like the proposal. Couple questions. Would it be correct to say that user.effective would be used when we know that the event represents some kind of attempted transition across an identity boundary. Examples of identity boundary transitions could be:
This wouldn't cover situations where we are establishing your identity for the first time or we don't have initial identity information.
Also it looks like we would only support one identity boundary transition per event? So you wouldn't capture the following as a single event:
I think one identity transition per event is good, I'm just making sure I'm reading it right. I can't think of an example where we couldn't replace source.user with user and destination.user with user.effective |
I just created the issue #810 for capturing information about Windows logon sessions and tokens and ran into this problem there, too. You can have multiple tokens in a single event, so whatever we do here should also be done there. I realized yet another case for the multiple X in an event. We currently have process and process.parent, but do we also need to add process.target? That would refer to cross-process events. For example, mimikatz.exe opening a handle and reading memory from lsass.exe. I don't think we need to pollute this issue with that specific scenario, but I figured it would be good to bring attention to the fact that "multiple users in an event" is just one example of "multiple X in an event", and the decision we make here should be easy enough to apply in multiple places. For that reason, I'm wondering if it could make sense to have a Edit: There are also some cases where you could have three different X's in an event. For example, the acting process, the logging process and the target process. s/process/user happens as well. |
@rw-access, Can you provide more information about this issue? Thank you |
@leehinman Yes, I agree with your examples. Whenever we can identify the prior identity (user at top level) and the ultimate identity , we should capture the former at Note that I don't think this should set an undue burden on event sources to keep track of users over successive events. I think it's fine to track users across events. So there's 2 situations I see here:
Hopefully the semantics work for setuid/setgid as well. I think they do, but please let me know if you see potential edge cases. Here's how I see the 3 levels example you're giving with
WDYT? I agree with @willemdh: there's no intention of nesting all of that new user mega-structure (user.target, user.effective...) in all places where user is currently reused. This bit is tricky, though, because I do want to drag along some of the nesting ( |
By the way, earlier in this thread I was asking about uses for But in my example in the previous comment, responding to Lee I did not use In other words, when crossing a host boundary, When changing identity on the same host (priv escalation or demotion like setuid), then it's Do we agree with that approach? Thanks for all the feedback so far <3 |
Update to the proposal:
So instead of I also considered other names like So to recap, if we go forward with this, what was the section "user.new.*" will no longer need a clarifying note at the end, and the example for a user modification event would look like this instead (user root renames bob to foo): {
"user": {
"name": "root",
"target": {
"name": "bob"
},
"changes": {
"name": "foo"
}
}
} |
Some NGFW can integrate with a user directory and will build an association between a host/IP and user identity (e.g. PAN User-ID, Check Point Identity Awareness). In these cases the |
@leehinman asked me to add a few examples here as well, this is for Zoom modules, often involving multiple users like (user X created user Y. Or User X modified group account Y for user Z) Some examples, where you have
Last example is a user approving a meeting invitation registration, with a example related owner of the meeting, and includes the username of the registration that was approved:
|
After reviewing proposals and discussions, new and old, private and public (#117, #234, #589, #678, elastic/beats#9963, elastic/beats#10111, elastic/beats#10192), here's a high level proposal. I'd like to get feedback on this.
When
user.*
is populated at the root of an event, it's meant to capture the user performing an action, or the only user relevant to an event, when that's the situation.The goal of this proposal is to solve the following use cases:
One thing to note, is that with real-time privilege escalation (e.g. sudo, MacOS modal) or auditing frameworks like auditd, it's useful to be able to identify all 3 of these additional users concurrently, in a single event.
Here are locations I propose we could nest the user schema, to represent various use cases:
Note that in each of these cases, we are nesting the
user
schema as a new name, similar to what we do withprocess.parent
. To give a concrete example the effective user name would be atuser.effective.name
(not atuser.effective.user.name
).user.effective.*
Used to identify the final identity, when logging in remotely as another user, or escalating privileges.
Simplified privilege escalation example, where "alice" escalates privileges to "root":
user.target.*
Used to identify the user being modified, or targeted by an action.
Simplified user management example, where "root" modifies user "bob":
user.new.*
Used to identify what was changed about the user. Ideally this would only capture the difference, not repeat all values.
Simplified user management example, when an existing user is modified, for example changing user name. Here user "bob" is renamed "foo" by "root":
Note: The creation of a new user would only use
user.target
, notuser.new
.user.new
should only be used.Putting it all together
If it's possible to determine who was the original user prior to privilege escalation, a full event could look like this:
The action being observed should be captured in
event.action
.If the event is user management, the category fields should be
event.category: [ "iam" ]
andevent.type: [ "user" ]
with a secondary entry inevent.type
, whichever is more appropriate: "creation", "deletion" or "change".If the event is authentication and privilege escalation,
event.category: [ "authentication" ]
,event.type: ["start"]
andevent.outcome
either "success" or "failure".Discussion points
Nowhere in the above plan do we use the current nestings of the
user
field set:client.user
,destination.user
,host.user
,server.user
,source.user
.I'm wondering if people are using
host.user
or if we should deprecate it for removal in ECS 2.0.I'd also like to know if the 4 nestings under the network-related field sets are currently being used. I realize that folks may have used for example
source.user
anddestination.user
to model remote logons or the "acting" vs "target" users, with ECS specifying nothing yet on how these interactions should be modelled until now. I'd like to get your input if the plan above makes sense.Are there other uses that are actually network-related for
source.user
anddestination.user
?The text was updated successfully, but these errors were encountered: