ESAの詳細EPLルールの例は次のとおりです。次に示す例には、同じユースケースを実現可能な複数の方法があります。
例1:
ユーザー アカウントを作成し、300秒以内に同じユーザー アカウントを削除します。ユーザー情報はuser_srcメタに格納されます。
EPL 1:
ルール名 | CreateuseraccountFollowedbyDeletionof Useraccount1 |
ルールの説明 | ユーザー アカウントを作成してから300秒以内に同じユーザー アカウントを削除するアクションのパターンを検知します。 |
ルールのコード |
|
注 |
|
EPL 2:
ルール名 | CreateuseraccountFollowedbyDeletionof Useraccount2 |
ルールの説明 | ユーザー アカウントを作成してから300秒以内に同じユーザー アカウントを削除するアクションのパターンを検知します。 |
ルールのコード |
SELECT * from pattern[every (a= Event(ec_subject='User' AND ec_outcome='Success' AND user_dst is NOT NULL AND ec_activity IN ('Create')) -> ( Event(ec_subject='User' AND ec_outcome='Success' AND user_dst is NOT NULL AND ec_activity IN ('Create') AND user_src=a.user_src)) )where timer:within(300 Sec) ]; |
注 |
|
例2:
ユーザーが作成された後に、同じユーザーがログインし、最終的にそのユーザーが削除されるというパターンを検出します。Windowsログの場合、ユーザー情報は、イベントに応じて、user_dstまたはuser_srcに格納されます。
user_src(create) = user_dst(Login) = user_src(Delete)
EPL 3:
ルール名 | CreateUserLoginandDeleteUser |
ルールの説明 | ユーザーがユーザー アカウントを作成し、そのユーザーでログインした後、ユーザー アカウントを削除するアクションのパターンを検知します。 |
ルールのコード |
SELECT * FROM Event(ec_subject='User' |
注 |
|
EPL 4:NamedWindowsとmatch recognizeの使用
ルール名 | CreateUserLoginandDeleteUser |
ルールの説明 | ユーザーがユーザー アカウントを作成し、そのユーザーでログインした後、ユーザー アカウントを削除するアクションのパターンを検知します。 |
ルールのコード |
@Name('NormalizedWindow') create window FilteredEvents.win:time(300 sec) (user String, ecactivity string, sessionid Long); @Name('UsersrcEvents') Insert into FilteredEvents select user_src as user, ec_activity as ecactivity, sessionid from Event( ec_subject='User' and ec_activity in ('Create','Delete') and ec_theme in ('UserGroup', 'Authentication') and ec_outcome='Success' and user_src is not null ); @Name('UsrdstEvents') Insert into FilteredEvents select user_dst as user, ec_activity as ecactivity, sessionid from Event( ec_subject='User' and ec_activity in (Logon’) and ec_theme in ('UserGroup', 'Authentication') and ec_outcome='Success' and user_dst is not null ); @Name('Pattern') @RSAAlert(oneInSeconds=0, identifiers={"user"}) select * from FilteredEvents |
EPL #5: Using Every @RSAAlert(oneInSeconds=0, identifiers={"user_src"})
SELECT a.time as time,a.ip_src as ip_src,a.user_dst as user_dst,a.ip_dst as ip_dst,a.alias_host as alias_host from pattern[every (a=Event (ec_subject='User' and ec_activity='Create' and ec_theme='UserGroup' and ec_outcome='Success') -> (Event(ec_subject='User' and ec_activity='Logon' and ec_theme='Authentication' and user_src=a.user_dst) -> b=Event(ec_subject='User' and ec_activity='Delete' and ec_theme='UserGroup' and user_dst=a.user_dst))) where timer:within(300 sec)];
ルール名 | CreateUserLoginandDeleteUser |
ルールの説明 | ユーザーがユーザー アカウントを作成し、そのユーザーでログインした後、ユーザー アカウントを削除するアクションのパターンを検知します。 |
例3:
同じソースIPからの過剰な回数のログイン失敗
EPL 6:@RSAAlert(oneInSeconds=0, identifiers={"ip_src"})
ルール名 | ExcessLoginFailure | ||||||||||||||||||||||||||||||||||||||||||||
ルールの説明 | 同一のユーザーが、一定時間内に複数回、同じソースIPからログインを試行して失敗したパターンを検知します。 | ||||||||||||||||||||||||||||||||||||||||||||
ルールのコード |
|
||||||||||||||||||||||||||||||||||||||||||||
注 |
後述のt=301の一連のイベントでは、300秒以内にログイン失敗が10回発生したものの、イベントのバッチはt=300でドロップされたため、アラートは発行されません。
|
EPL 7:@RSAAlert(oneInSeconds=0, identifiers={"ip_src"})
ルール名 | ExcessLoginFailure |
ルールの説明 | 同一のユーザーが、一定時間内に複数回、同じソースIPからログインを試行して失敗したパターンを検知します。 |
ルールのコード |
SELECT * FROM |
注 |
|
例4:
同じソースから同じ宛先への複数の異なるユーザー、または、複数の異なるソースから同じ宛先への単一のユーザーによる複数回のログイン失敗
EPL 8:groupwin、time_length_batch、uniqueの使用
ルール名 | MultiplefailedLogins |
ルールの説明 | 次の場合に複数回ログインが失敗したパターンを検知します。 - 同じソースから同じ宛先への複数のユーザー - 複数のソースから同じ宛先への単一のユーザー |
ルールのコード |
SELECT * FROM |
注 |
|
例5:
指定の時間内にデバイスからのログ トラフィックがない
EPL 9:groupwin、time_length_batch、uniqueの使用
ルール名 | NoLogTraffic |
ルールの説明 | 指定の時間内にデバイスからのログ トラフィックが確認されないパターンを検知します。 |
ルールのコード |
SELECT * FROM pattern [every a = Event(device_ip IN ('10.0.0.0','10.0.0.1') AND medium = 32) -> (timer:interval (3600 seconds) AND NOT Event(device_ip = a.device_ip AND device_type = a.device_type AND medium = 32))]; |
注 |
|
例6:
複数回のログイン失敗の後に、同じユーザーによるロックアウト イベントが発生していない
EPL 10:groupwin、time_length_batch、uniqueの使用
ルール名 | FailedloginswoLockout |
ルールの説明 | 複数回のログイン失敗の後に、同じユーザーによるロックアウト イベントが発生していないパターンを検知します。 |
ルールのコード |
|
注 |
|
注:
1. メタ キー内の「.」は「_」に置き換える必要があります。
2. すべてのパターンは期限を定める必要があります。
3. ステートメントの前に適切なタグを使用します。
a) @RSAPersist:
b) @RSAAlert:
詳細については、次の資料を参照してください。
- EPLのドキュメントについては、http://www.espertech.com/esper/documentation.phpを参照してください。
- EPLオンライン ツールについては、http://esper-epl-tryout.appspot.com/epltryout/mainform.htmlを参照してください。