From c982c89f49f08b85a62b6c4093b1bc23c09a64df Mon Sep 17 00:00:00 2001 From: v-rusraut Date: Thu, 5 Dec 2024 12:40:23 +0530 Subject: [PATCH 1/3] Repackage - ZPA --- .../ZscalerSharedZPASession.yaml | 5 +- .../ZscalerUnexpectedCountEventResult.yaml | 5 +- .../ZscalerUnexpectedCountries.yaml | 5 +- .../ZscalerUnexpectedUpdateOperation.yaml | 5 +- .../ZscalerZPAConnectionsByDormantUser.yaml | 5 +- .../ZscalerZPAConnectionsByNewUser.yaml | 5 +- .../ZscalerZPAConnectionsFromNewCountry.yaml | 5 +- .../ZscalerZPAConnectionsFromNewIP.yaml | 5 +- ...ZPAConnectionsOutsideOperationalHours.yaml | 5 +- .../ZscalerZPAUnexpectedSessionDuration.yaml | 5 +- ...Solution_Zscaler Private Access (ZPA).json | 7 +- .../ZscalerAbnormalTotalBytesSize.yaml | 3 - .../ZscalerApplicationByUsers.yaml | 3 - .../ZscalerConnectionCloseReason.yaml | 3 - .../Hunting Queries/ZscalerIPsByPorts.yaml | 3 - .../ZscalerSourceLocation.yaml | 3 - .../Hunting Queries/ZscalerTopConnectors.yaml | 3 - .../Hunting Queries/ZscalerTopSourceIP.yaml | 3 - .../Hunting Queries/ZscalerUrlhostname.yaml | 3 - .../ZscalerUserAccessGroups.yaml | 3 - .../ZscalerUserServerErrors.yaml | 3 - .../Package/3.0.1.zip | Bin 0 -> 15427 bytes .../Package/createUiDefinition.json | 53 +- .../Package/mainTemplate.json | 683 +++--------------- .../ReleaseNotes.md | 3 +- 25 files changed, 118 insertions(+), 708 deletions(-) create mode 100644 Solutions/Zscaler Private Access (ZPA)/Package/3.0.1.zip diff --git a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerSharedZPASession.yaml b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerSharedZPASession.yaml index bce4d870836..1f1294768a4 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerSharedZPASession.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerSharedZPASession.yaml @@ -5,9 +5,6 @@ description: | severity: High status: Available requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL @@ -53,5 +50,5 @@ entityMappings: fieldMappings: - identifier: Address columnName: IPCustomEntity -version: 1.0.1 +version: 1.0.2 kind: Scheduled \ No newline at end of file diff --git a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerUnexpectedCountEventResult.yaml b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerUnexpectedCountEventResult.yaml index 772282cc8dc..2f499ce68dc 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerUnexpectedCountEventResult.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerUnexpectedCountEventResult.yaml @@ -5,9 +5,6 @@ description: | severity: High status: Available requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL @@ -32,5 +29,5 @@ entityMappings: fieldMappings: - identifier: Name columnName: AccountCustomEntity -version: 1.0.1 +version: 1.0.2 kind: Scheduled diff --git a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerUnexpectedCountries.yaml b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerUnexpectedCountries.yaml index d1c6c002e68..1abbb9035db 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerUnexpectedCountries.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerUnexpectedCountries.yaml @@ -5,9 +5,6 @@ description: | severity: High status: Available requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL @@ -35,5 +32,5 @@ entityMappings: fieldMappings: - identifier: Address columnName: IPCustomEntity -version: 1.0.1 +version: 1.0.2 kind: Scheduled diff --git a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerUnexpectedUpdateOperation.yaml b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerUnexpectedUpdateOperation.yaml index 0557346f28e..129e12a53d1 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerUnexpectedUpdateOperation.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerUnexpectedUpdateOperation.yaml @@ -5,9 +5,6 @@ description: | severity: Medium status: Available requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL @@ -36,5 +33,5 @@ entityMappings: fieldMappings: - identifier: ProcessId columnName: ProcessCustomEntity -version: 1.0.1 +version: 1.0.2 kind: Scheduled diff --git a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsByDormantUser.yaml b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsByDormantUser.yaml index 1926926b5ef..a3b966dde11 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsByDormantUser.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsByDormantUser.yaml @@ -5,9 +5,6 @@ description: | severity: High status: Available requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL @@ -37,5 +34,5 @@ entityMappings: fieldMappings: - identifier: Name columnName: AccountCustomEntity -version: 1.0.1 +version: 1.0.2 kind: Scheduled diff --git a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsByNewUser.yaml b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsByNewUser.yaml index d2ad4fa545d..fd931f85280 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsByNewUser.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsByNewUser.yaml @@ -5,9 +5,6 @@ description: | severity: Medium status: Available requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL @@ -36,5 +33,5 @@ entityMappings: fieldMappings: - identifier: Name columnName: AccountCustomEntity -version: 1.0.1 +version: 1.0.2 kind: Scheduled diff --git a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsFromNewCountry.yaml b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsFromNewCountry.yaml index 90b47b1e7b5..84efacd61bb 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsFromNewCountry.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsFromNewCountry.yaml @@ -5,9 +5,6 @@ description: | severity: Medium status: Available requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL @@ -38,5 +35,5 @@ entityMappings: fieldMappings: - identifier: Name columnName: AccountCustomEntity -version: 1.0.1 +version: 1.0.2 kind: Scheduled diff --git a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsFromNewIP.yaml b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsFromNewIP.yaml index fbd1a600bb0..c19e4be3f7a 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsFromNewIP.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsFromNewIP.yaml @@ -5,9 +5,6 @@ description: | severity: Medium status: Available requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL @@ -42,5 +39,5 @@ entityMappings: fieldMappings: - identifier: Address columnName: IPCustomEntity -version: 1.0.1 +version: 1.0.2 kind: Scheduled diff --git a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsOutsideOperationalHours.yaml b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsOutsideOperationalHours.yaml index 59697e40e5f..71ac17e144f 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsOutsideOperationalHours.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAConnectionsOutsideOperationalHours.yaml @@ -5,9 +5,6 @@ description: | severity: Medium status: Available requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL @@ -32,5 +29,5 @@ entityMappings: fieldMappings: - identifier: Name columnName: AccountCustomEntity -version: 1.0.1 +version: 1.0.2 kind: Scheduled diff --git a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAUnexpectedSessionDuration.yaml b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAUnexpectedSessionDuration.yaml index f6008e4575c..9444fe691ad 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAUnexpectedSessionDuration.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Analytic Rules/ZscalerZPAUnexpectedSessionDuration.yaml @@ -5,9 +5,6 @@ description: | severity: Medium status: Available requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL @@ -51,5 +48,5 @@ entityMappings: fieldMappings: - identifier: Address columnName: IPCustomEntity -version: 1.0.1 +version: 1.0.2 kind: Scheduled diff --git a/Solutions/Zscaler Private Access (ZPA)/Data/Solution_Zscaler Private Access (ZPA).json b/Solutions/Zscaler Private Access (ZPA)/Data/Solution_Zscaler Private Access (ZPA).json index dc999aa7233..2d919df5f32 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Data/Solution_Zscaler Private Access (ZPA).json +++ b/Solutions/Zscaler Private Access (ZPA)/Data/Solution_Zscaler Private Access (ZPA).json @@ -2,13 +2,10 @@ "Name": "Zscaler Private Access (ZPA)", "Author": "Microsoft - support@microsoft.com", "Logo": "", - "Description": "The [Zscaler Private Access (ZPA)](https://www.zscaler.com/) solution provides the capability to ingest [Zscaler Private Access events](https://help.zscaler.com/zpa/what-zscaler-private-access) into Microsoft Sentinel.\n\n This solution is dependent on the Custom logs via AMA connector to collect the logs. The Custom logs solution will be installed as part of this solution installation. \n\n **NOTE**: Microsoft recommends installation of Custom logs via AMA Connector. Legacy connector uses the Log Analytics agent which is about to be deprecated by **Aug 31, 2024**. Using MMA and AMA on same machine can cause log duplication and extra ingestion cost [more details](https://learn.microsoft.com/azure/sentinel/ama-migrate?WT.mc_id=Portal-fx).", + "Description": "The [Zscaler Private Access (ZPA)](https://www.zscaler.com/) solution provides the capability to ingest [Zscaler Private Access events](https://help.zscaler.com/zpa/what-zscaler-private-access) into Microsoft Sentinel.\n\n This solution is dependent on the Custom logs via AMA connector to collect the logs. The Custom logs solution will be installed as part of this solution installation. \n\n **NOTE**: Microsoft recommends installation of Custom logs via AMA Connector. Legacy connector uses the Log Analytics agent which were deprecated on **Aug 31, 2024.** Using MMA and AMA on same machine can cause log duplication and extra ingestion cost [more details](https://learn.microsoft.com/azure/sentinel/ama-migrate?WT.mc_id=Portal-fx).", "Workbooks": [ "Workbooks/ZscalerZPA.json" ], - "Data Connectors": [ - "Data Connectors/Connector_LogAnalytics_agent_Zscaler_ZPA.json" - ], "Hunting Queries": [ "Hunting Queries/ZscalerAbnormalTotalBytesSize.yaml", "Hunting Queries/ZscalerApplicationByUsers.yaml", @@ -41,6 +38,6 @@ ], "Metadata": "SolutionMetadata.json", "BasePath": "C:\\GitHub\\Azure-Sentinel\\Solutions\\Zscaler Private Access (ZPA)", - "Version": "3.0.0", + "Version": "3.0.1", "TemplateSpec": true } \ No newline at end of file diff --git a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerAbnormalTotalBytesSize.yaml b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerAbnormalTotalBytesSize.yaml index 66bfeeb8845..3fe44b728da 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerAbnormalTotalBytesSize.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerAbnormalTotalBytesSize.yaml @@ -4,9 +4,6 @@ description: | 'Query shows abnormal total bytes size.' severity: Low requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL diff --git a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerApplicationByUsers.yaml b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerApplicationByUsers.yaml index 86f28c6e29b..bb5be2fcd17 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerApplicationByUsers.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerApplicationByUsers.yaml @@ -4,9 +4,6 @@ description: | 'Query shows applications using by accounts.' severity: Low requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL diff --git a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerConnectionCloseReason.yaml b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerConnectionCloseReason.yaml index 974f8814b11..dec1bc718e4 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerConnectionCloseReason.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerConnectionCloseReason.yaml @@ -4,9 +4,6 @@ description: | 'Query shows connection close reasons.' severity: Low requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL diff --git a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerIPsByPorts.yaml b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerIPsByPorts.yaml index 3e736ae615e..45d1e7b9614 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerIPsByPorts.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerIPsByPorts.yaml @@ -4,9 +4,6 @@ description: | 'Query shows destination ports by IP address.' severity: Low requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL diff --git a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerSourceLocation.yaml b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerSourceLocation.yaml index 76a31b3ba57..eab0c9cf91b 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerSourceLocation.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerSourceLocation.yaml @@ -4,9 +4,6 @@ description: | 'Query shows Users by source location countries.' severity: Low requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL diff --git a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerTopConnectors.yaml b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerTopConnectors.yaml index ba2fa748d17..dee1cf4a947 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerTopConnectors.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerTopConnectors.yaml @@ -4,9 +4,6 @@ description: | 'Query shows top connectors.' severity: Low requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL diff --git a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerTopSourceIP.yaml b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerTopSourceIP.yaml index c906076efd8..b10cd213adf 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerTopSourceIP.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerTopSourceIP.yaml @@ -4,9 +4,6 @@ description: | 'Query shows top source IP.' severity: Low requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL diff --git a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerUrlhostname.yaml b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerUrlhostname.yaml index d82e6bd9359..9b7c4d17720 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerUrlhostname.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerUrlhostname.yaml @@ -4,9 +4,6 @@ description: | 'Query shows rare urlhostname requests.' severity: Low requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL diff --git a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerUserAccessGroups.yaml b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerUserAccessGroups.yaml index 17c3289a90e..182b91829d8 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerUserAccessGroups.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerUserAccessGroups.yaml @@ -4,9 +4,6 @@ description: | 'Query shows users access groups.' severity: Low requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL diff --git a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerUserServerErrors.yaml b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerUserServerErrors.yaml index 6cbaad180ed..c3abda9a150 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerUserServerErrors.yaml +++ b/Solutions/Zscaler Private Access (ZPA)/Hunting Queries/ZscalerUserServerErrors.yaml @@ -4,9 +4,6 @@ description: | 'Query shows server error by user.' severity: Low requiredDataConnectors: - - connectorId: ZscalerPrivateAccess - dataTypes: - - ZPAEvent - connectorId: CustomLogsAma datatypes: - ZPA_CL diff --git a/Solutions/Zscaler Private Access (ZPA)/Package/3.0.1.zip b/Solutions/Zscaler Private Access (ZPA)/Package/3.0.1.zip new file mode 100644 index 0000000000000000000000000000000000000000..6c100fd134747bc3a48de750f57b643fdde5ecb5 GIT binary patch literal 15427 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%0D3QmekT=@M{)Wk3HC_fHzABwKJ58bd6p_%R9MSI zL*E1;woWGlx0H_4Qe2t7n77ozdWy?-^jW5 zFc6L6aPO<|MZ-+__Eq?zE#b+exH3@)MJB=5L*|S9Q-_8lb=`kghfw4>K6PDHe*a+z z8cB>~PlPmHG1g?}=3;MzZGoa<)MqC!LiMf%CL~?>HwFwUxScqQ2=H4pFz9Kzi$DJ- zO3LM?xMPYU!f;)QX|0egQ_2x9IGFlYfma>1B{3Y_*WXJd2F4R&AzX4YM|y1~9Gndk zETof|HZB}JM~ycjwUU#*{0J?zl5pVHu?Dq6XMxbaAb~;MTB`#BhXIS4WPu$H7ClSf zlVJysu{;t8#tR4MBS3xCXsif=P~3dv``0j3TJ+0iuWLGdwPY@5(%0SadPls za4CiHXM2fsh&TxLi@tU)3BRdDV2n8(4va%c5E&JQvwy|UVQxI(1Vxf;>;&uxXP5S3 z`|_$X749mO>WgW*htb|S_F(qA381B9llI@dOW!4ujm{n!*JQh$jVeY0*U_v^@6VXySRhChoRW9%xIy!t2G&K1 z{2bfp3Lp#ekIWL9p`RON+$=2~ik{H}aR-8~qI8UCA}5f)$lr!~3Nq2HGvCJ%(HkRw zv^>-zD&@HvqU~^?1OZ@Y+pLvfW4~Sy-)5MQ_lt`dZK>=~zi+9rStnH#;WS zh#dGLE;Fc*iR*#uA|g=#YEPQx09Syf(5JLfayUMca&P2C2((V)GbPT70nLW0U0XL~f(v+)nwe|a>eEMDop;!k*|4^oZ4XE#;eaDB= zem9$fra{~ewjye*MEvR%e0IZFx=yuy>ktVEbSIog6<{ z=3rIz+?5|ppB6M@`rP)4<0t6yG50$Y0~ z*dqQO(8dpcxR?@k$4SpVnM5Wx@q%OHtQ{YwHpGEzjW z8UE~acU~sTD2b#G$KvjoIv-hwtjG_DASaInK~a!e?>&`Gu;1%bs;`b#t&H?41#maA zxBff0Y&QNVwsL<$F|As4h(`iBWKX@5G;R%tDQkzf&#tepuM~e!iTwmhq}HJ}^-2`z zEl|jt9Y6&PaC}g`o^m`HE|+ z{sP$UR$k?|C)hvX^;UwC_py{*;Wbr$C*o#raM4B$*Z8-{a$CHhHvy6vm7TfyXqa4K6BB)ZT za3ETx%sUN)=0qklzv>x~c*QDTbhMy-^QYc5;&U#cXa^ z0O@mau@d8&sBImD&;w==D)bgWuAxU(Be$<63e3=M`2-45kP~_x{Q@T#MUupS+nx6P zws{`l&D@Eqbos~3AYc_{n_KDWwPYQG+Zc>72pkY~wbaXv4a4Z*XmAY=uC1ixAZ)NX z5O9MHHb~pI1QVP$TqDosZ)9EC?-%u4E@l?rTSLkcRjq713jvMye9)$J@S*}(dIl_g4Z@TT22}u@PXNwE;e%48gM+WZGl27plB#sD zr~+ty0yKY7nv@P6z6Q^L<}XT|(!rz(!2Jo}{za))I=J{6JOkXnD7i`pn<{|EC&1&P zuo)53fucZIDG=t#E=*lYnpI4I2H)>+) zJVxZ@AMgdIA_dWMEYB|7B1=mmM`21wq|R~zdU4aSjVNt27;VGk$%<)YF3t=gcCew0 zfU&)~eV7d$_=0HuE8PR$WIBwtty33@O`C3!0(ku>y`6pKe^c_T6oiht1=FF(11Y#3 zN@@<*x?GMK#=68GKjnXJnNxsN&_S)(^m*IXECyk+_c zS3_jcUj*N~96_#xCv+wEZXfuZi`ku+rH4}wS-iaQfDk6r!4~mK&|C8#8 z6|J&z43%w$QW)kvY1G%!-9XR^%G{_fApzm@^%GP{78DEv\n\n**Note:** Please refer to the following before installing the solution: \n\n• Review the solution [Release Notes](https://github.com/Azure/Azure-Sentinel/tree/master/Solutions/Zscaler%20Private%20Access%20%28ZPA%29/ReleaseNotes.md)\n\n • There may be [known issues](https://aka.ms/sentinelsolutionsknownissues) pertaining to this Solution, please refer to them before installing.\n\nThe [Zscaler Private Access (ZPA)](https://www.zscaler.com/) solution provides the capability to ingest [Zscaler Private Access events](https://help.zscaler.com/zpa/what-zscaler-private-access) into Microsoft Sentinel.\n\n This solution is dependent on the Custom logs via AMA connector to collect the logs. The Custom logs solution will be installed as part of this solution installation. \n\n **NOTE**: Microsoft recommends installation of Custom logs via AMA Connector. Legacy connector uses the Log Analytics agent which is about to be deprecated by **Aug 31, 2024**. Using MMA and AMA on same machine can cause log duplication and extra ingestion cost [more details](https://learn.microsoft.com/azure/sentinel/ama-migrate?WT.mc_id=Portal-fx).\n\n**Data Connectors:** 1, **Parsers:** 1, **Workbooks:** 1, **Analytic Rules:** 10, **Hunting Queries:** 10\n\n[Learn more about Microsoft Sentinel](https://aka.ms/azuresentinel) | [Learn more about Solutions](https://aka.ms/azuresentinelsolutionsdoc)", + "description": "\n\n**Note:** Please refer to the following before installing the solution: \n\n• Review the solution [Release Notes](https://github.com/Azure/Azure-Sentinel/tree/master/Solutions/Zscaler%20Private%20Access%20%28ZPA%29/ReleaseNotes.md)\n\n • There may be [known issues](https://aka.ms/sentinelsolutionsknownissues) pertaining to this Solution, please refer to them before installing.\n\nThe [Zscaler Private Access (ZPA)](https://www.zscaler.com/) solution provides the capability to ingest [Zscaler Private Access events](https://help.zscaler.com/zpa/what-zscaler-private-access) into Microsoft Sentinel.\n\n This solution is dependent on the Custom logs via AMA connector to collect the logs. The Custom logs solution will be installed as part of this solution installation. \n\n **NOTE**: Microsoft recommends installation of Custom logs via AMA Connector. Legacy connector uses the Log Analytics agent which were deprecated on **Aug 31, 2024.** Using MMA and AMA on same machine can cause log duplication and extra ingestion cost [more details](https://learn.microsoft.com/azure/sentinel/ama-migrate?WT.mc_id=Portal-fx).\n\n**Parsers:** 1, **Workbooks:** 1, **Analytic Rules:** 10, **Hunting Queries:** 10\n\n[Learn more about Microsoft Sentinel](https://aka.ms/azuresentinel) | [Learn more about Solutions](https://aka.ms/azuresentinelsolutionsdoc)", "subscription": { "resourceProviders": [ "Microsoft.OperationsManagement/solutions", @@ -51,37 +51,6 @@ } ], "steps": [ - { - "name": "dataconnectors", - "label": "Data Connectors", - "bladeTitle": "Data Connectors", - "elements": [ - { - "name": "dataconnectors1-text", - "type": "Microsoft.Common.TextBlock", - "options": { - "text": "This Solution installs the data connector for Zscaler Private Access (ZPA). You can get Zscaler Private Access (ZPA) custom log data in your Microsoft Sentinel workspace. After installing the solution, configure and enable this data connector by following guidance in Manage solution view." - } - }, - { - "name": "dataconnectors-parser-text", - "type": "Microsoft.Common.TextBlock", - "options": { - "text": "The Solution installs a parser that transforms the ingested data into Microsoft Sentinel normalized format. The normalized format enables better correlation of different types of data from different data sources to drive end-to-end outcomes seamlessly in security monitoring, hunting, incident investigation and response scenarios in Microsoft Sentinel." - } - }, - { - "name": "dataconnectors-link2", - "type": "Microsoft.Common.TextBlock", - "options": { - "link": { - "label": "Learn more about connecting data sources", - "uri": "https://docs.microsoft.com/azure/sentinel/connect-data-sources" - } - } - } - ] - }, { "name": "workbooks", "label": "Workbooks", @@ -323,7 +292,7 @@ "name": "huntingquery1-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query shows abnormal total bytes size. This hunting query depends on ZscalerPrivateAccess CustomLogsAma data connector (ZPAEvent ZPA_CL Parser or Table)" + "text": "Query shows abnormal total bytes size. This hunting query depends on CustomLogsAma data connector (ZPA_CL Parser or Table)" } } ] @@ -337,7 +306,7 @@ "name": "huntingquery2-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query shows applications using by accounts. This hunting query depends on ZscalerPrivateAccess CustomLogsAma data connector (ZPAEvent ZPA_CL Parser or Table)" + "text": "Query shows applications using by accounts. This hunting query depends on CustomLogsAma data connector (ZPA_CL Parser or Table)" } } ] @@ -351,7 +320,7 @@ "name": "huntingquery3-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query shows connection close reasons. This hunting query depends on ZscalerPrivateAccess CustomLogsAma data connector (ZPAEvent ZPA_CL Parser or Table)" + "text": "Query shows connection close reasons. This hunting query depends on CustomLogsAma data connector (ZPA_CL Parser or Table)" } } ] @@ -365,7 +334,7 @@ "name": "huntingquery4-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query shows destination ports by IP address. This hunting query depends on ZscalerPrivateAccess CustomLogsAma data connector (ZPAEvent ZPA_CL Parser or Table)" + "text": "Query shows destination ports by IP address. This hunting query depends on CustomLogsAma data connector (ZPA_CL Parser or Table)" } } ] @@ -379,7 +348,7 @@ "name": "huntingquery5-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query shows Users by source location countries. This hunting query depends on ZscalerPrivateAccess CustomLogsAma data connector (ZPAEvent ZPA_CL Parser or Table)" + "text": "Query shows Users by source location countries. This hunting query depends on CustomLogsAma data connector (ZPA_CL Parser or Table)" } } ] @@ -393,7 +362,7 @@ "name": "huntingquery6-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query shows top connectors. This hunting query depends on ZscalerPrivateAccess CustomLogsAma data connector (ZPAEvent ZPA_CL Parser or Table)" + "text": "Query shows top connectors. This hunting query depends on CustomLogsAma data connector (ZPA_CL Parser or Table)" } } ] @@ -407,7 +376,7 @@ "name": "huntingquery7-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query shows top source IP. This hunting query depends on ZscalerPrivateAccess CustomLogsAma data connector (ZPAEvent ZPA_CL Parser or Table)" + "text": "Query shows top source IP. This hunting query depends on CustomLogsAma data connector (ZPA_CL Parser or Table)" } } ] @@ -421,7 +390,7 @@ "name": "huntingquery8-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query shows rare urlhostname requests. This hunting query depends on ZscalerPrivateAccess CustomLogsAma data connector (ZPAEvent ZPA_CL Parser or Table)" + "text": "Query shows rare urlhostname requests. This hunting query depends on CustomLogsAma data connector (ZPA_CL Parser or Table)" } } ] @@ -435,7 +404,7 @@ "name": "huntingquery9-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query shows users access groups. This hunting query depends on ZscalerPrivateAccess CustomLogsAma data connector (ZPAEvent ZPA_CL Parser or Table)" + "text": "Query shows users access groups. This hunting query depends on CustomLogsAma data connector (ZPA_CL Parser or Table)" } } ] @@ -449,7 +418,7 @@ "name": "huntingquery10-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query shows server error by user. This hunting query depends on ZscalerPrivateAccess CustomLogsAma data connector (ZPAEvent ZPA_CL Parser or Table)" + "text": "Query shows server error by user. This hunting query depends on CustomLogsAma data connector (ZPA_CL Parser or Table)" } } ] diff --git a/Solutions/Zscaler Private Access (ZPA)/Package/mainTemplate.json b/Solutions/Zscaler Private Access (ZPA)/Package/mainTemplate.json index 2a0e3a695a3..d75816ec757 100644 --- a/Solutions/Zscaler Private Access (ZPA)/Package/mainTemplate.json +++ b/Solutions/Zscaler Private Access (ZPA)/Package/mainTemplate.json @@ -41,7 +41,7 @@ "email": "support@microsoft.com", "_email": "[variables('email')]", "_solutionName": "Zscaler Private Access (ZPA)", - "_solutionVersion": "3.0.0", + "_solutionVersion": "3.0.1", "solutionId": "azuresentinel.azure-sentinel-solution-zscalerprivateaccess", "_solutionId": "[variables('solutionId')]", "workbookVersion1": "1.0.0", @@ -51,15 +51,6 @@ "_workbookContentId1": "[variables('workbookContentId1')]", "workspaceResourceId": "[resourceId('microsoft.OperationalInsights/Workspaces', parameters('workspace'))]", "_workbookcontentProductId1": "[concat(take(variables('_solutionId'),50),'-','wb','-', uniqueString(concat(variables('_solutionId'),'-','Workbook','-',variables('_workbookContentId1'),'-', variables('workbookVersion1'))))]", - "uiConfigId1": "ZscalerPrivateAccess", - "_uiConfigId1": "[variables('uiConfigId1')]", - "dataConnectorContentId1": "ZscalerPrivateAccess", - "_dataConnectorContentId1": "[variables('dataConnectorContentId1')]", - "dataConnectorId1": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentId1'))]", - "_dataConnectorId1": "[variables('dataConnectorId1')]", - "dataConnectorTemplateSpecName1": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentId1'))))]", - "dataConnectorVersion1": "1.0.0", - "_dataConnectorcontentProductId1": "[concat(take(variables('_solutionId'),50),'-','dc','-', uniqueString(concat(variables('_solutionId'),'-','DataConnector','-',variables('_dataConnectorContentId1'),'-', variables('dataConnectorVersion1'))))]", "huntingQueryObject1": { "huntingQueryVersion1": "1.0.0", "_huntingQuerycontentId1": "181dc982-4631-11ec-81d3-0242ac130003", @@ -118,74 +109,74 @@ "parserContentId1": "ZPAEvent-Parser" }, "analyticRuleObject1": { - "analyticRuleVersion1": "1.0.1", + "analyticRuleVersion1": "1.0.2", "_analyticRulecontentId1": "40a98355-0e52-479f-8c91-4ab659cba878", "analyticRuleId1": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', '40a98355-0e52-479f-8c91-4ab659cba878')]", "analyticRuleTemplateSpecName1": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('40a98355-0e52-479f-8c91-4ab659cba878')))]", - "_analyticRulecontentProductId1": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','40a98355-0e52-479f-8c91-4ab659cba878','-', '1.0.1')))]" + "_analyticRulecontentProductId1": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','40a98355-0e52-479f-8c91-4ab659cba878','-', '1.0.2')))]" }, "analyticRuleObject2": { - "analyticRuleVersion2": "1.0.1", + "analyticRuleVersion2": "1.0.2", "_analyticRulecontentId2": "593e3e2a-43ce-11ec-81d3-0242ac130003", "analyticRuleId2": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', '593e3e2a-43ce-11ec-81d3-0242ac130003')]", "analyticRuleTemplateSpecName2": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('593e3e2a-43ce-11ec-81d3-0242ac130003')))]", - "_analyticRulecontentProductId2": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','593e3e2a-43ce-11ec-81d3-0242ac130003','-', '1.0.1')))]" + "_analyticRulecontentProductId2": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','593e3e2a-43ce-11ec-81d3-0242ac130003','-', '1.0.2')))]" }, "analyticRuleObject3": { - "analyticRuleVersion3": "1.0.1", + "analyticRuleVersion3": "1.0.2", "_analyticRulecontentId3": "b3d112b4-3e1e-11ec-9bbc-0242ac130002", "analyticRuleId3": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', 'b3d112b4-3e1e-11ec-9bbc-0242ac130002')]", "analyticRuleTemplateSpecName3": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('b3d112b4-3e1e-11ec-9bbc-0242ac130002')))]", - "_analyticRulecontentProductId3": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','b3d112b4-3e1e-11ec-9bbc-0242ac130002','-', '1.0.1')))]" + "_analyticRulecontentProductId3": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','b3d112b4-3e1e-11ec-9bbc-0242ac130002','-', '1.0.2')))]" }, "analyticRuleObject4": { - "analyticRuleVersion4": "1.0.1", + "analyticRuleVersion4": "1.0.2", "_analyticRulecontentId4": "672e2846-4226-11ec-81d3-0242ac130003", "analyticRuleId4": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', '672e2846-4226-11ec-81d3-0242ac130003')]", "analyticRuleTemplateSpecName4": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('672e2846-4226-11ec-81d3-0242ac130003')))]", - "_analyticRulecontentProductId4": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','672e2846-4226-11ec-81d3-0242ac130003','-', '1.0.1')))]" + "_analyticRulecontentProductId4": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','672e2846-4226-11ec-81d3-0242ac130003','-', '1.0.2')))]" }, "analyticRuleObject5": { - "analyticRuleVersion5": "1.0.1", + "analyticRuleVersion5": "1.0.2", "_analyticRulecontentId5": "66bc77ee-3e45-11ec-9bbc-0242ac130002", "analyticRuleId5": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', '66bc77ee-3e45-11ec-9bbc-0242ac130002')]", "analyticRuleTemplateSpecName5": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('66bc77ee-3e45-11ec-9bbc-0242ac130002')))]", - "_analyticRulecontentProductId5": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','66bc77ee-3e45-11ec-9bbc-0242ac130002','-', '1.0.1')))]" + "_analyticRulecontentProductId5": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','66bc77ee-3e45-11ec-9bbc-0242ac130002','-', '1.0.2')))]" }, "analyticRuleObject6": { - "analyticRuleVersion6": "1.0.1", + "analyticRuleVersion6": "1.0.2", "_analyticRulecontentId6": "236a7ec1-0120-40f2-a157-c1a72dde8bcb", "analyticRuleId6": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', '236a7ec1-0120-40f2-a157-c1a72dde8bcb')]", "analyticRuleTemplateSpecName6": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('236a7ec1-0120-40f2-a157-c1a72dde8bcb')))]", - "_analyticRulecontentProductId6": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','236a7ec1-0120-40f2-a157-c1a72dde8bcb','-', '1.0.1')))]" + "_analyticRulecontentProductId6": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','236a7ec1-0120-40f2-a157-c1a72dde8bcb','-', '1.0.2')))]" }, "analyticRuleObject7": { - "analyticRuleVersion7": "1.0.1", + "analyticRuleVersion7": "1.0.2", "_analyticRulecontentId7": "c4902121-7a7e-44d1-810b-88d26db622ff", "analyticRuleId7": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', 'c4902121-7a7e-44d1-810b-88d26db622ff')]", "analyticRuleTemplateSpecName7": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('c4902121-7a7e-44d1-810b-88d26db622ff')))]", - "_analyticRulecontentProductId7": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','c4902121-7a7e-44d1-810b-88d26db622ff','-', '1.0.1')))]" + "_analyticRulecontentProductId7": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','c4902121-7a7e-44d1-810b-88d26db622ff','-', '1.0.2')))]" }, "analyticRuleObject8": { - "analyticRuleVersion8": "1.0.1", + "analyticRuleVersion8": "1.0.2", "_analyticRulecontentId8": "24f0779d-3927-403a-aac1-cc8791653606", "analyticRuleId8": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', '24f0779d-3927-403a-aac1-cc8791653606')]", "analyticRuleTemplateSpecName8": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('24f0779d-3927-403a-aac1-cc8791653606')))]", - "_analyticRulecontentProductId8": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','24f0779d-3927-403a-aac1-cc8791653606','-', '1.0.1')))]" + "_analyticRulecontentProductId8": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','24f0779d-3927-403a-aac1-cc8791653606','-', '1.0.2')))]" }, "analyticRuleObject9": { - "analyticRuleVersion9": "1.0.1", + "analyticRuleVersion9": "1.0.2", "_analyticRulecontentId9": "2859ad22-46c8-4cc7-ad7b-80ce0cba0af3", "analyticRuleId9": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', '2859ad22-46c8-4cc7-ad7b-80ce0cba0af3')]", "analyticRuleTemplateSpecName9": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('2859ad22-46c8-4cc7-ad7b-80ce0cba0af3')))]", - "_analyticRulecontentProductId9": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','2859ad22-46c8-4cc7-ad7b-80ce0cba0af3','-', '1.0.1')))]" + "_analyticRulecontentProductId9": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','2859ad22-46c8-4cc7-ad7b-80ce0cba0af3','-', '1.0.2')))]" }, "analyticRuleObject10": { - "analyticRuleVersion10": "1.0.1", + "analyticRuleVersion10": "1.0.2", "_analyticRulecontentId10": "e07846e0-43ad-11ec-81d3-0242ac130003", "analyticRuleId10": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', 'e07846e0-43ad-11ec-81d3-0242ac130003')]", "analyticRuleTemplateSpecName10": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('e07846e0-43ad-11ec-81d3-0242ac130003')))]", - "_analyticRulecontentProductId10": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','e07846e0-43ad-11ec-81d3-0242ac130003','-', '1.0.1')))]" + "_analyticRulecontentProductId10": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','e07846e0-43ad-11ec-81d3-0242ac130003','-', '1.0.2')))]" }, "_solutioncontentProductId": "[concat(take(variables('_solutionId'),50),'-','sl','-', uniqueString(concat(variables('_solutionId'),'-','Solution','-',variables('_solutionId'),'-', variables('_solutionVersion'))))]" }, @@ -199,7 +190,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerZPA Workbook with template version 3.0.0", + "description": "ZscalerZPA Workbook with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('workbookVersion1')]", @@ -282,429 +273,6 @@ "version": "[variables('workbookVersion1')]" } }, - { - "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", - "apiVersion": "2023-04-01-preview", - "name": "[variables('dataConnectorTemplateSpecName1')]", - "location": "[parameters('workspace-location')]", - "dependsOn": [ - "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" - ], - "properties": { - "description": "Zscaler Private Access (ZPA) data connector with template version 3.0.0", - "mainTemplate": { - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", - "contentVersion": "[variables('dataConnectorVersion1')]", - "parameters": {}, - "variables": {}, - "resources": [ - { - "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',variables('_dataConnectorContentId1'))]", - "apiVersion": "2021-03-01-preview", - "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", - "location": "[parameters('workspace-location')]", - "kind": "GenericUI", - "properties": { - "connectorUiConfig": { - "id": "[variables('_uiConfigId1')]", - "title": "[Deprecated] Zscaler Private Access", - "publisher": "Zscaler", - "descriptionMarkdown": "The [Zscaler Private Access (ZPA)](https://help.zscaler.com/zpa/what-zscaler-private-access) data connector provides the capability to ingest [Zscaler Private Access events](https://help.zscaler.com/zpa/log-streaming-service) into Microsoft Sentinel. Refer to [Zscaler Private Access documentation](https://help.zscaler.com/zpa) for more information.", - "additionalRequirementBanner": "This data connector depends on a parser based on Kusto Function to work as expected. Follow the steps to use this Kusto Function alias **ZPAEvent** in queries and workbooks. [Follow steps to get this Kusto Function>](https://aka.ms/sentinel-ZscalerPrivateAccess-parser)", - "graphQueries": [ - { - "metricName": "Total data received", - "legend": "ZPA_CL", - "baseQuery": "ZPA_CL" - } - ], - "sampleQueries": [ - { - "description": "All logs", - "query": "\nZPAEvent\n| sort by TimeGenerated" - } - ], - "dataTypes": [ - { - "name": "ZPA_CL", - "lastDataReceivedQuery": "ZPA_CL\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" - } - ], - "connectivityCriterias": [ - { - "type": "IsConnectedQuery", - "value": [ - "ZPA_CL\n | summarize LastLogReceived = max(TimeGenerated)\n | project IsConnected = LastLogReceived > ago(30d)" - ] - } - ], - "availability": { - "status": 1, - "isPreview": false - }, - "permissions": { - "resourceProvider": [ - { - "provider": "Microsoft.OperationalInsights/workspaces", - "permissionsDisplayText": "read and write permissions are required.", - "providerDisplayName": "Workspace", - "scope": "Workspace", - "requiredPermissions": { - "write": true, - "read": true, - "delete": true - } - }, - { - "provider": "Microsoft.OperationalInsights/workspaces/sharedKeys", - "permissionsDisplayText": "read permissions to shared keys for the workspace are required. [See the documentation to learn more about workspace keys](https://docs.microsoft.com/azure/azure-monitor/platform/agent-windows#obtain-workspace-id-and-key).", - "providerDisplayName": "Keys", - "scope": "Workspace", - "requiredPermissions": { - "action": true - } - } - ] - }, - "instructionSteps": [ - { - "description": ">**NOTE:** This data connector depends on a parser based on a Kusto Function to work as expected. [Follow these steps](https://aka.ms/sentinel-ZscalerPrivateAccess-parser) to create the Kusto Functions alias, **ZPAEvent**" - }, - { - "description": ">**NOTE:** This data connector has been developed using Zscaler Private Access version: 21.67.1" - }, - { - "description": "Install the agent on the Server where the Zscaler Private Access logs are forwarded.\n\n> Logs from Zscaler Private Access Server deployed on Linux or Windows servers are collected by **Linux** or **Windows** agents.", - "instructions": [ - { - "parameters": { - "title": "Choose where to install the Linux agent:", - "instructionSteps": [ - { - "title": "Install agent on Azure Linux Virtual Machine", - "description": "Select the machine to install the agent on and then click **Connect**.", - "instructions": [ - { - "parameters": { - "linkType": "InstallAgentOnLinuxVirtualMachine" - }, - "type": "InstallAgent" - } - ] - }, - { - "title": "Install agent on a non-Azure Linux Machine", - "description": "Download the agent on the relevant machine and follow the instructions.", - "instructions": [ - { - "parameters": { - "linkType": "InstallAgentOnLinuxNonAzure" - }, - "type": "InstallAgent" - } - ] - } - ] - }, - "type": "InstructionStepsGroup" - } - ], - "title": "1. Install and onboard the agent for Linux or Windows" - }, - { - "instructions": [ - { - "parameters": { - "title": "Choose where to install the Windows agent:", - "instructionSteps": [ - { - "title": "Install agent on Azure Windows Virtual Machine", - "description": "Select the machine to install the agent on and then click **Connect**.", - "instructions": [ - { - "parameters": { - "linkType": "InstallAgentOnVirtualMachine" - }, - "type": "InstallAgent" - } - ] - }, - { - "title": "Install agent on a non-Azure Windows Machine", - "description": "Download the agent on the relevant machine and follow the instructions.", - "instructions": [ - { - "parameters": { - "linkType": "InstallAgentOnNonAzure" - }, - "type": "InstallAgent" - } - ] - } - ] - }, - "type": "InstructionStepsGroup" - } - ] - }, - { - "description": "Follow the configuration steps below to get Zscaler Private Access logs into Microsoft Sentinel. Refer to the [Azure Monitor Documentation](https://docs.microsoft.com/azure/azure-monitor/agents/data-sources-json) for more details on these steps.\nZscaler Private Access logs are delivered via Log Streaming Service (LSS). Refer to [LSS documentation](https://help.zscaler.com/zpa/about-log-streaming-service) for detailed information\n1. Configure [Log Receivers](https://help.zscaler.com/zpa/configuring-log-receiver). While configuring a Log Receiver, choose **JSON** as **Log Template**.\n2. Download config file [zpa.conf](https://aka.ms/sentinel-ZscalerPrivateAccess-conf) \n\t\twget -v https://aka.ms/sentinel-zscalerprivateaccess-conf -O zpa.conf\n3. Login to the server where you have installed Azure Log Analytics agent.\n4. Copy zpa.conf to the /etc/opt/microsoft/omsagent/**workspace_id**/conf/omsagent.d/ folder.\n5. Edit zpa.conf as follows:\n\n\t a. specify port which you have set your Zscaler Log Receivers to forward logs to (line 4)\n\n\t b. zpa.conf uses the port **22033** by default. Ensure this port is not being used by any other source on your server\n\n\t c. If you would like to change the default port for **zpa.conf** make sure that it should not get conflict with default AMA agent ports I.e.(For example CEF uses TCP port **25226** or **25224**) \n\n\t d. replace **workspace_id** with real value of your Workspace ID (lines 14,15,16,19)\n5. Save changes and restart the Azure Log Analytics agent for Linux service with the following command:\n\t\tsudo /opt/microsoft/omsagent/bin/service_control restart", - "instructions": [ - { - "parameters": { - "fillWith": [ - "WorkspaceId" - ], - "label": "Workspace ID" - }, - "type": "CopyableLabel" - } - ], - "title": "2. Configure the logs to be collected" - } - ] - } - } - }, - { - "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "apiVersion": "2023-04-01-preview", - "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', last(split(variables('_dataConnectorId1'),'/'))))]", - "properties": { - "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentId1'))]", - "contentId": "[variables('_dataConnectorContentId1')]", - "kind": "DataConnector", - "version": "[variables('dataConnectorVersion1')]", - "source": { - "kind": "Solution", - "name": "Zscaler Private Access (ZPA)", - "sourceId": "[variables('_solutionId')]" - }, - "author": { - "name": "Microsoft", - "email": "[variables('_email')]" - }, - "support": { - "name": "Microsoft Corporation", - "email": "support@microsoft.com", - "tier": "Microsoft", - "link": "https://support.microsoft.com" - } - } - } - ] - }, - "packageKind": "Solution", - "packageVersion": "[variables('_solutionVersion')]", - "packageName": "[variables('_solutionName')]", - "packageId": "[variables('_solutionId')]", - "contentSchemaVersion": "3.0.0", - "contentId": "[variables('_dataConnectorContentId1')]", - "contentKind": "DataConnector", - "displayName": "[Deprecated] Zscaler Private Access", - "contentProductId": "[variables('_dataConnectorcontentProductId1')]", - "id": "[variables('_dataConnectorcontentProductId1')]", - "version": "[variables('dataConnectorVersion1')]" - } - }, - { - "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "apiVersion": "2023-04-01-preview", - "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', last(split(variables('_dataConnectorId1'),'/'))))]", - "dependsOn": [ - "[variables('_dataConnectorId1')]" - ], - "location": "[parameters('workspace-location')]", - "properties": { - "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentId1'))]", - "contentId": "[variables('_dataConnectorContentId1')]", - "kind": "DataConnector", - "version": "[variables('dataConnectorVersion1')]", - "source": { - "kind": "Solution", - "name": "Zscaler Private Access (ZPA)", - "sourceId": "[variables('_solutionId')]" - }, - "author": { - "name": "Microsoft", - "email": "[variables('_email')]" - }, - "support": { - "name": "Microsoft Corporation", - "email": "support@microsoft.com", - "tier": "Microsoft", - "link": "https://support.microsoft.com" - } - } - }, - { - "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',variables('_dataConnectorContentId1'))]", - "apiVersion": "2021-03-01-preview", - "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", - "location": "[parameters('workspace-location')]", - "kind": "GenericUI", - "properties": { - "connectorUiConfig": { - "title": "[Deprecated] Zscaler Private Access", - "publisher": "Zscaler", - "descriptionMarkdown": "The [Zscaler Private Access (ZPA)](https://help.zscaler.com/zpa/what-zscaler-private-access) data connector provides the capability to ingest [Zscaler Private Access events](https://help.zscaler.com/zpa/log-streaming-service) into Microsoft Sentinel. Refer to [Zscaler Private Access documentation](https://help.zscaler.com/zpa) for more information.", - "graphQueries": [ - { - "metricName": "Total data received", - "legend": "ZPA_CL", - "baseQuery": "ZPA_CL" - } - ], - "dataTypes": [ - { - "name": "ZPA_CL", - "lastDataReceivedQuery": "ZPA_CL\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" - } - ], - "connectivityCriterias": [ - { - "type": "IsConnectedQuery", - "value": [ - "ZPA_CL\n | summarize LastLogReceived = max(TimeGenerated)\n | project IsConnected = LastLogReceived > ago(30d)" - ] - } - ], - "sampleQueries": [ - { - "description": "All logs", - "query": "\nZPAEvent\n| sort by TimeGenerated" - } - ], - "availability": { - "status": 1, - "isPreview": false - }, - "permissions": { - "resourceProvider": [ - { - "provider": "Microsoft.OperationalInsights/workspaces", - "permissionsDisplayText": "read and write permissions are required.", - "providerDisplayName": "Workspace", - "scope": "Workspace", - "requiredPermissions": { - "write": true, - "read": true, - "delete": true - } - }, - { - "provider": "Microsoft.OperationalInsights/workspaces/sharedKeys", - "permissionsDisplayText": "read permissions to shared keys for the workspace are required. [See the documentation to learn more about workspace keys](https://docs.microsoft.com/azure/azure-monitor/platform/agent-windows#obtain-workspace-id-and-key).", - "providerDisplayName": "Keys", - "scope": "Workspace", - "requiredPermissions": { - "action": true - } - } - ] - }, - "instructionSteps": [ - { - "description": ">**NOTE:** This data connector depends on a parser based on a Kusto Function to work as expected. [Follow these steps](https://aka.ms/sentinel-ZscalerPrivateAccess-parser) to create the Kusto Functions alias, **ZPAEvent**" - }, - { - "description": ">**NOTE:** This data connector has been developed using Zscaler Private Access version: 21.67.1" - }, - { - "description": "Install the agent on the Server where the Zscaler Private Access logs are forwarded.\n\n> Logs from Zscaler Private Access Server deployed on Linux or Windows servers are collected by **Linux** or **Windows** agents.", - "instructions": [ - { - "parameters": { - "title": "Choose where to install the Linux agent:", - "instructionSteps": [ - { - "title": "Install agent on Azure Linux Virtual Machine", - "description": "Select the machine to install the agent on and then click **Connect**.", - "instructions": [ - { - "parameters": { - "linkType": "InstallAgentOnLinuxVirtualMachine" - }, - "type": "InstallAgent" - } - ] - }, - { - "title": "Install agent on a non-Azure Linux Machine", - "description": "Download the agent on the relevant machine and follow the instructions.", - "instructions": [ - { - "parameters": { - "linkType": "InstallAgentOnLinuxNonAzure" - }, - "type": "InstallAgent" - } - ] - } - ] - }, - "type": "InstructionStepsGroup" - } - ], - "title": "1. Install and onboard the agent for Linux or Windows" - }, - { - "instructions": [ - { - "parameters": { - "title": "Choose where to install the Windows agent:", - "instructionSteps": [ - { - "title": "Install agent on Azure Windows Virtual Machine", - "description": "Select the machine to install the agent on and then click **Connect**.", - "instructions": [ - { - "parameters": { - "linkType": "InstallAgentOnVirtualMachine" - }, - "type": "InstallAgent" - } - ] - }, - { - "title": "Install agent on a non-Azure Windows Machine", - "description": "Download the agent on the relevant machine and follow the instructions.", - "instructions": [ - { - "parameters": { - "linkType": "InstallAgentOnNonAzure" - }, - "type": "InstallAgent" - } - ] - } - ] - }, - "type": "InstructionStepsGroup" - } - ] - }, - { - "description": "Follow the configuration steps below to get Zscaler Private Access logs into Microsoft Sentinel. Refer to the [Azure Monitor Documentation](https://docs.microsoft.com/azure/azure-monitor/agents/data-sources-json) for more details on these steps.\nZscaler Private Access logs are delivered via Log Streaming Service (LSS). Refer to [LSS documentation](https://help.zscaler.com/zpa/about-log-streaming-service) for detailed information\n1. Configure [Log Receivers](https://help.zscaler.com/zpa/configuring-log-receiver). While configuring a Log Receiver, choose **JSON** as **Log Template**.\n2. Download config file [zpa.conf](https://aka.ms/sentinel-ZscalerPrivateAccess-conf) \n\t\twget -v https://aka.ms/sentinel-zscalerprivateaccess-conf -O zpa.conf\n3. Login to the server where you have installed Azure Log Analytics agent.\n4. Copy zpa.conf to the /etc/opt/microsoft/omsagent/**workspace_id**/conf/omsagent.d/ folder.\n5. Edit zpa.conf as follows:\n\n\t a. specify port which you have set your Zscaler Log Receivers to forward logs to (line 4)\n\n\t b. zpa.conf uses the port **22033** by default. Ensure this port is not being used by any other source on your server\n\n\t c. If you would like to change the default port for **zpa.conf** make sure that it should not get conflict with default AMA agent ports I.e.(For example CEF uses TCP port **25226** or **25224**) \n\n\t d. replace **workspace_id** with real value of your Workspace ID (lines 14,15,16,19)\n5. Save changes and restart the Azure Log Analytics agent for Linux service with the following command:\n\t\tsudo /opt/microsoft/omsagent/bin/service_control restart", - "instructions": [ - { - "parameters": { - "fillWith": [ - "WorkspaceId" - ], - "label": "Workspace ID" - }, - "type": "CopyableLabel" - } - ], - "title": "2. Configure the logs to be collected" - } - ], - "id": "[variables('_uiConfigId1')]", - "additionalRequirementBanner": "This data connector depends on a parser based on Kusto Function to work as expected. Follow the steps to use this Kusto Function alias **ZPAEvent** in queries and workbooks. [Follow steps to get this Kusto Function>](https://aka.ms/sentinel-ZscalerPrivateAccess-parser)" - } - } - }, { "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", "apiVersion": "2023-04-01-preview", @@ -714,7 +282,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerAbnormalTotalBytesSize_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ZscalerAbnormalTotalBytesSize_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject1').huntingQueryVersion1]", @@ -799,7 +367,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerApplicationByUsers_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ZscalerApplicationByUsers_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject2').huntingQueryVersion2]", @@ -884,7 +452,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerConnectionCloseReason_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ZscalerConnectionCloseReason_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject3').huntingQueryVersion3]", @@ -969,7 +537,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerIPsByPorts_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ZscalerIPsByPorts_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject4').huntingQueryVersion4]", @@ -1054,7 +622,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerSourceLocation_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ZscalerSourceLocation_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject5').huntingQueryVersion5]", @@ -1139,7 +707,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerTopConnectors_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ZscalerTopConnectors_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject6').huntingQueryVersion6]", @@ -1224,7 +792,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerTopSourceIP_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ZscalerTopSourceIP_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject7').huntingQueryVersion7]", @@ -1309,7 +877,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerUrlhostname_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ZscalerUrlhostname_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject8').huntingQueryVersion8]", @@ -1394,7 +962,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerUserAccessGroups_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ZscalerUserAccessGroups_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject9').huntingQueryVersion9]", @@ -1479,7 +1047,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerUserServerErrors_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ZscalerUserServerErrors_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject10').huntingQueryVersion10]", @@ -1564,7 +1132,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZPAEvent Data Parser with template version 3.0.0", + "description": "ZPAEvent Data Parser with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('parserObject1').parserVersion1]", @@ -1696,7 +1264,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerSharedZPASession_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ZscalerSharedZPASession_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject1').analyticRuleVersion1]", @@ -1724,16 +1292,10 @@ "status": "Available", "requiredDataConnectors": [ { - "dataTypes": [ - "ZPAEvent" - ], - "connectorId": "ZscalerPrivateAccess" - }, - { + "connectorId": "CustomLogsAma", "datatypes": [ "ZPA_CL" - ], - "connectorId": "CustomLogsAma" + ] } ], "tactics": [ @@ -1747,8 +1309,8 @@ { "fieldMappings": [ { - "identifier": "Name", - "columnName": "AccountCustomEntity" + "columnName": "AccountCustomEntity", + "identifier": "Name" } ], "entityType": "Account" @@ -1756,8 +1318,8 @@ { "fieldMappings": [ { - "identifier": "Address", - "columnName": "IPCustomEntity" + "columnName": "IPCustomEntity", + "identifier": "Address" } ], "entityType": "IP" @@ -1816,7 +1378,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerUnexpectedCountEventResult_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ZscalerUnexpectedCountEventResult_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject2').analyticRuleVersion2]", @@ -1844,16 +1406,10 @@ "status": "Available", "requiredDataConnectors": [ { - "dataTypes": [ - "ZPAEvent" - ], - "connectorId": "ZscalerPrivateAccess" - }, - { + "connectorId": "CustomLogsAma", "datatypes": [ "ZPA_CL" - ], - "connectorId": "CustomLogsAma" + ] } ], "tactics": [ @@ -1867,8 +1423,8 @@ { "fieldMappings": [ { - "identifier": "Name", - "columnName": "AccountCustomEntity" + "columnName": "AccountCustomEntity", + "identifier": "Name" } ], "entityType": "Account" @@ -1927,7 +1483,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerUnexpectedCountries_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ZscalerUnexpectedCountries_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject3').analyticRuleVersion3]", @@ -1955,16 +1511,10 @@ "status": "Available", "requiredDataConnectors": [ { - "dataTypes": [ - "ZPAEvent" - ], - "connectorId": "ZscalerPrivateAccess" - }, - { + "connectorId": "CustomLogsAma", "datatypes": [ "ZPA_CL" - ], - "connectorId": "CustomLogsAma" + ] } ], "tactics": [ @@ -1978,8 +1528,8 @@ { "fieldMappings": [ { - "identifier": "Name", - "columnName": "AccountCustomEntity" + "columnName": "AccountCustomEntity", + "identifier": "Name" } ], "entityType": "Account" @@ -1987,8 +1537,8 @@ { "fieldMappings": [ { - "identifier": "Address", - "columnName": "IPCustomEntity" + "columnName": "IPCustomEntity", + "identifier": "Address" } ], "entityType": "IP" @@ -2047,7 +1597,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerUnexpectedUpdateOperation_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ZscalerUnexpectedUpdateOperation_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject4').analyticRuleVersion4]", @@ -2075,16 +1625,10 @@ "status": "Available", "requiredDataConnectors": [ { - "dataTypes": [ - "ZPAEvent" - ], - "connectorId": "ZscalerPrivateAccess" - }, - { + "connectorId": "CustomLogsAma", "datatypes": [ "ZPA_CL" - ], - "connectorId": "CustomLogsAma" + ] } ], "tactics": [ @@ -2098,8 +1642,8 @@ { "fieldMappings": [ { - "identifier": "ProcessId", - "columnName": "ProcessCustomEntity" + "columnName": "ProcessCustomEntity", + "identifier": "ProcessId" } ], "entityType": "Process" @@ -2158,7 +1702,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerZPAConnectionsByDormantUser_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ZscalerZPAConnectionsByDormantUser_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject5').analyticRuleVersion5]", @@ -2186,16 +1730,10 @@ "status": "Available", "requiredDataConnectors": [ { - "dataTypes": [ - "ZPAEvent" - ], - "connectorId": "ZscalerPrivateAccess" - }, - { + "connectorId": "CustomLogsAma", "datatypes": [ "ZPA_CL" - ], - "connectorId": "CustomLogsAma" + ] } ], "tactics": [ @@ -2208,8 +1746,8 @@ { "fieldMappings": [ { - "identifier": "Name", - "columnName": "AccountCustomEntity" + "columnName": "AccountCustomEntity", + "identifier": "Name" } ], "entityType": "Account" @@ -2268,7 +1806,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerZPAConnectionsByNewUser_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ZscalerZPAConnectionsByNewUser_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject6').analyticRuleVersion6]", @@ -2296,16 +1834,10 @@ "status": "Available", "requiredDataConnectors": [ { - "dataTypes": [ - "ZPAEvent" - ], - "connectorId": "ZscalerPrivateAccess" - }, - { + "connectorId": "CustomLogsAma", "datatypes": [ "ZPA_CL" - ], - "connectorId": "CustomLogsAma" + ] } ], "tactics": [ @@ -2318,8 +1850,8 @@ { "fieldMappings": [ { - "identifier": "Name", - "columnName": "AccountCustomEntity" + "columnName": "AccountCustomEntity", + "identifier": "Name" } ], "entityType": "Account" @@ -2378,7 +1910,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerZPAConnectionsFromNewCountry_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ZscalerZPAConnectionsFromNewCountry_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject7').analyticRuleVersion7]", @@ -2406,16 +1938,10 @@ "status": "Available", "requiredDataConnectors": [ { - "dataTypes": [ - "ZPAEvent" - ], - "connectorId": "ZscalerPrivateAccess" - }, - { + "connectorId": "CustomLogsAma", "datatypes": [ "ZPA_CL" - ], - "connectorId": "CustomLogsAma" + ] } ], "tactics": [ @@ -2429,8 +1955,8 @@ { "fieldMappings": [ { - "identifier": "Name", - "columnName": "AccountCustomEntity" + "columnName": "AccountCustomEntity", + "identifier": "Name" } ], "entityType": "Account" @@ -2489,7 +2015,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerZPAConnectionsFromNewIP_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ZscalerZPAConnectionsFromNewIP_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject8').analyticRuleVersion8]", @@ -2517,16 +2043,10 @@ "status": "Available", "requiredDataConnectors": [ { - "dataTypes": [ - "ZPAEvent" - ], - "connectorId": "ZscalerPrivateAccess" - }, - { + "connectorId": "CustomLogsAma", "datatypes": [ "ZPA_CL" - ], - "connectorId": "CustomLogsAma" + ] } ], "tactics": [ @@ -2540,8 +2060,8 @@ { "fieldMappings": [ { - "identifier": "Name", - "columnName": "AccountCustomEntity" + "columnName": "AccountCustomEntity", + "identifier": "Name" } ], "entityType": "Account" @@ -2549,8 +2069,8 @@ { "fieldMappings": [ { - "identifier": "Address", - "columnName": "IPCustomEntity" + "columnName": "IPCustomEntity", + "identifier": "Address" } ], "entityType": "IP" @@ -2609,7 +2129,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerZPAConnectionsOutsideOperationalHours_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ZscalerZPAConnectionsOutsideOperationalHours_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject9').analyticRuleVersion9]", @@ -2637,16 +2157,10 @@ "status": "Available", "requiredDataConnectors": [ { - "dataTypes": [ - "ZPAEvent" - ], - "connectorId": "ZscalerPrivateAccess" - }, - { + "connectorId": "CustomLogsAma", "datatypes": [ "ZPA_CL" - ], - "connectorId": "CustomLogsAma" + ] } ], "tactics": [ @@ -2660,8 +2174,8 @@ { "fieldMappings": [ { - "identifier": "Name", - "columnName": "AccountCustomEntity" + "columnName": "AccountCustomEntity", + "identifier": "Name" } ], "entityType": "Account" @@ -2720,7 +2234,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ZscalerZPAUnexpectedSessionDuration_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ZscalerZPAUnexpectedSessionDuration_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject10').analyticRuleVersion10]", @@ -2748,16 +2262,10 @@ "status": "Available", "requiredDataConnectors": [ { - "dataTypes": [ - "ZPAEvent" - ], - "connectorId": "ZscalerPrivateAccess" - }, - { + "connectorId": "CustomLogsAma", "datatypes": [ "ZPA_CL" - ], - "connectorId": "CustomLogsAma" + ] } ], "tactics": [ @@ -2771,8 +2279,8 @@ { "fieldMappings": [ { - "identifier": "Name", - "columnName": "AccountCustomEntity" + "columnName": "AccountCustomEntity", + "identifier": "Name" } ], "entityType": "Account" @@ -2780,8 +2288,8 @@ { "fieldMappings": [ { - "identifier": "Address", - "columnName": "IPCustomEntity" + "columnName": "IPCustomEntity", + "identifier": "Address" } ], "entityType": "IP" @@ -2836,12 +2344,12 @@ "apiVersion": "2023-04-01-preview", "location": "[parameters('workspace-location')]", "properties": { - "version": "3.0.0", + "version": "3.0.1", "kind": "Solution", "contentSchemaVersion": "3.0.0", "displayName": "Zscaler Private Access (ZPA)", "publisherDisplayName": "Microsoft Sentinel, Microsoft Corporation", - "descriptionHtml": "

Note: Please refer to the following before installing the solution:

\n

• Review the solution Release Notes

\n

• There may be known issues pertaining to this Solution, please refer to them before installing.

\n

The Zscaler Private Access (ZPA) solution provides the capability to ingest Zscaler Private Access events into Microsoft Sentinel.

\n

This solution is dependent on the Custom logs via AMA connector to collect the logs. The Custom logs solution will be installed as part of this solution installation.

\n

NOTE: Microsoft recommends installation of Custom logs via AMA Connector. Legacy connector uses the Log Analytics agent which is about to be deprecated by Aug 31, 2024. Using MMA and AMA on same machine can cause log duplication and extra ingestion cost more details.

\n

Data Connectors: 1, Parsers: 1, Workbooks: 1, Analytic Rules: 10, Hunting Queries: 10

\n

Learn more about Microsoft Sentinel | Learn more about Solutions

\n", + "descriptionHtml": "

Note: Please refer to the following before installing the solution:

\n

• Review the solution Release Notes

\n

• There may be known issues pertaining to this Solution, please refer to them before installing.

\n

The Zscaler Private Access (ZPA) solution provides the capability to ingest Zscaler Private Access events into Microsoft Sentinel.

\n

This solution is dependent on the Custom logs via AMA connector to collect the logs. The Custom logs solution will be installed as part of this solution installation.

\n

NOTE: Microsoft recommends installation of Custom logs via AMA Connector. Legacy connector uses the Log Analytics agent which were deprecated on Aug 31, 2024. Using MMA and AMA on same machine can cause log duplication and extra ingestion cost more details.

\n

Parsers: 1, Workbooks: 1, Analytic Rules: 10, Hunting Queries: 10

\n

Learn more about Microsoft Sentinel | Learn more about Solutions

\n", "contentKind": "Solution", "contentProductId": "[variables('_solutioncontentProductId')]", "id": "[variables('_solutioncontentProductId')]", @@ -2870,11 +2378,6 @@ "contentId": "[variables('_workbookContentId1')]", "version": "[variables('workbookVersion1')]" }, - { - "kind": "DataConnector", - "contentId": "[variables('_dataConnectorContentId1')]", - "version": "[variables('dataConnectorVersion1')]" - }, { "kind": "HuntingQuery", "contentId": "[variables('huntingQueryObject1')._huntingQuerycontentId1]", diff --git a/Solutions/Zscaler Private Access (ZPA)/ReleaseNotes.md b/Solutions/Zscaler Private Access (ZPA)/ReleaseNotes.md index aa511c4919d..a50754e9f45 100644 --- a/Solutions/Zscaler Private Access (ZPA)/ReleaseNotes.md +++ b/Solutions/Zscaler Private Access (ZPA)/ReleaseNotes.md @@ -1,3 +1,4 @@ | **Version** | **Date Modified (DD-MM-YYYY)** | **Change History** | |-------------|--------------------------------|--------------------------------------------------------------------| -| 3.0.0 | 22-08-2024 | Deprecating data connectors | +| 3.0.1 | 05-12-2024 | Removed Deperacted **Data connectors** | +| 3.0.0 | 22-08-2024 | Deprecating data connectors | From 5ec84b9f57aabc75f2048502fd0ea4d4281831a0 Mon Sep 17 00:00:00 2001 From: v-rusraut Date: Thu, 5 Dec 2024 13:06:36 +0530 Subject: [PATCH 2/3] Repackage - ApacheHTTPServer --- .../Analytic Rules/ApacheCVE-2021-41773.yaml | 5 +- .../Analytic Rules/ApacheCommandInURI.yaml | 5 +- .../ApacheKnownMaliciousUserAgents.yaml | 5 +- ...pacheMultipleClientErrorsFromSingleIP.yaml | 5 +- ...tipleServerErrorsRequestsFromSingleIP.yaml | 5 +- .../Analytic Rules/ApachePrivateIpInUrl.yaml | 5 +- .../ApachePutSuspiciousFiles.yaml | 5 +- .../ApacheRequestFromPrivateIP.yaml | 5 +- .../ApacheRequestToRareFile.yaml | 5 +- .../ApacheRequestToSensitiveFiles.yaml | 5 +- .../Data/Solution_Apache Http Server.json | 7 +- .../ApacheFilesErrorRequests.yaml | 3 - .../Hunting Queries/ApacheFilesRequested.yaml | 3 - .../ApacheRareFilesRequested.yaml | 3 - .../ApacheRareUAWithClientErrors.yaml | 3 - .../ApacheRareURLsRequested.yaml | 3 - .../Hunting Queries/ApacheRareUserAgents.yaml | 3 - .../ApacheRequestsToUnexistingFiles.yaml | 3 - .../ApacheUnexpectedPostRequests.yaml | 3 - .../ApacheUrlClienterrors.yaml | 3 - .../ApacheUrlServerErrors.yaml | 3 - Solutions/ApacheHTTPServer/Package/3.0.1.zip | Bin 0 -> 14543 bytes .../Package/createUiDefinition.json | 53 +- .../Package/mainTemplate.json | 691 +++--------------- Solutions/ApacheHTTPServer/ReleaseNotes.md | 3 +- 25 files changed, 125 insertions(+), 709 deletions(-) create mode 100644 Solutions/ApacheHTTPServer/Package/3.0.1.zip diff --git a/Solutions/ApacheHTTPServer/Analytic Rules/ApacheCVE-2021-41773.yaml b/Solutions/ApacheHTTPServer/Analytic Rules/ApacheCVE-2021-41773.yaml index d873e09bf9a..c252801b517 100644 --- a/Solutions/ApacheHTTPServer/Analytic Rules/ApacheCVE-2021-41773.yaml +++ b/Solutions/ApacheHTTPServer/Analytic Rules/ApacheCVE-2021-41773.yaml @@ -5,9 +5,6 @@ description: | severity: High status: Available requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL @@ -33,5 +30,5 @@ entityMappings: fieldMappings: - identifier: Url columnName: UrlCustomEntity -version: 1.0.2 +version: 1.0.3 kind: Scheduled \ No newline at end of file diff --git a/Solutions/ApacheHTTPServer/Analytic Rules/ApacheCommandInURI.yaml b/Solutions/ApacheHTTPServer/Analytic Rules/ApacheCommandInURI.yaml index 2e67d722d87..f6424723bb8 100644 --- a/Solutions/ApacheHTTPServer/Analytic Rules/ApacheCommandInURI.yaml +++ b/Solutions/ApacheHTTPServer/Analytic Rules/ApacheCommandInURI.yaml @@ -5,9 +5,6 @@ description: | severity: High status: Available requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL @@ -30,5 +27,5 @@ entityMappings: fieldMappings: - identifier: Url columnName: UrlCustomEntity -version: 1.0.2 +version: 1.0.3 kind: Scheduled \ No newline at end of file diff --git a/Solutions/ApacheHTTPServer/Analytic Rules/ApacheKnownMaliciousUserAgents.yaml b/Solutions/ApacheHTTPServer/Analytic Rules/ApacheKnownMaliciousUserAgents.yaml index 891127d5e62..52a1b2da5bf 100644 --- a/Solutions/ApacheHTTPServer/Analytic Rules/ApacheKnownMaliciousUserAgents.yaml +++ b/Solutions/ApacheHTTPServer/Analytic Rules/ApacheKnownMaliciousUserAgents.yaml @@ -5,9 +5,6 @@ description: | severity: High status: Available requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL @@ -30,5 +27,5 @@ entityMappings: fieldMappings: - identifier: Address columnName: IPCustomEntity -version: 1.0.2 +version: 1.0.3 kind: Scheduled \ No newline at end of file diff --git a/Solutions/ApacheHTTPServer/Analytic Rules/ApacheMultipleClientErrorsFromSingleIP.yaml b/Solutions/ApacheHTTPServer/Analytic Rules/ApacheMultipleClientErrorsFromSingleIP.yaml index 2c779d60d87..04cd4db6ff2 100644 --- a/Solutions/ApacheHTTPServer/Analytic Rules/ApacheMultipleClientErrorsFromSingleIP.yaml +++ b/Solutions/ApacheHTTPServer/Analytic Rules/ApacheMultipleClientErrorsFromSingleIP.yaml @@ -5,9 +5,6 @@ description: | severity: Medium status: Available requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL @@ -32,5 +29,5 @@ entityMappings: fieldMappings: - identifier: Address columnName: IPCustomEntity -version: 1.0.2 +version: 1.0.3 kind: Scheduled \ No newline at end of file diff --git a/Solutions/ApacheHTTPServer/Analytic Rules/ApacheMultipleServerErrorsRequestsFromSingleIP.yaml b/Solutions/ApacheHTTPServer/Analytic Rules/ApacheMultipleServerErrorsRequestsFromSingleIP.yaml index ef2c91752fe..83de9bbed17 100644 --- a/Solutions/ApacheHTTPServer/Analytic Rules/ApacheMultipleServerErrorsRequestsFromSingleIP.yaml +++ b/Solutions/ApacheHTTPServer/Analytic Rules/ApacheMultipleServerErrorsRequestsFromSingleIP.yaml @@ -5,9 +5,6 @@ description: | severity: Medium status: Available requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL @@ -34,5 +31,5 @@ entityMappings: fieldMappings: - identifier: Address columnName: IPCustomEntity -version: 1.0.2 +version: 1.0.3 kind: Scheduled \ No newline at end of file diff --git a/Solutions/ApacheHTTPServer/Analytic Rules/ApachePrivateIpInUrl.yaml b/Solutions/ApacheHTTPServer/Analytic Rules/ApachePrivateIpInUrl.yaml index 94e34e5c069..2056ab429f1 100644 --- a/Solutions/ApacheHTTPServer/Analytic Rules/ApachePrivateIpInUrl.yaml +++ b/Solutions/ApacheHTTPServer/Analytic Rules/ApachePrivateIpInUrl.yaml @@ -5,9 +5,6 @@ description: | severity: Medium status: Available requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL @@ -29,5 +26,5 @@ entityMappings: fieldMappings: - identifier: Url columnName: UrlCustomEntity -version: 1.0.2 +version: 1.0.3 kind: Scheduled \ No newline at end of file diff --git a/Solutions/ApacheHTTPServer/Analytic Rules/ApachePutSuspiciousFiles.yaml b/Solutions/ApacheHTTPServer/Analytic Rules/ApachePutSuspiciousFiles.yaml index 427b74d0e31..fe9d7cbf880 100644 --- a/Solutions/ApacheHTTPServer/Analytic Rules/ApachePutSuspiciousFiles.yaml +++ b/Solutions/ApacheHTTPServer/Analytic Rules/ApachePutSuspiciousFiles.yaml @@ -5,9 +5,6 @@ description: | severity: Medium status: Available requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL @@ -38,5 +35,5 @@ entityMappings: fieldMappings: - identifier: Url columnName: UrlCustomEntity -version: 1.0.1 +version: 1.0.2 kind: Scheduled \ No newline at end of file diff --git a/Solutions/ApacheHTTPServer/Analytic Rules/ApacheRequestFromPrivateIP.yaml b/Solutions/ApacheHTTPServer/Analytic Rules/ApacheRequestFromPrivateIP.yaml index 4a2e5737737..37b62a36cb1 100644 --- a/Solutions/ApacheHTTPServer/Analytic Rules/ApacheRequestFromPrivateIP.yaml +++ b/Solutions/ApacheHTTPServer/Analytic Rules/ApacheRequestFromPrivateIP.yaml @@ -5,9 +5,6 @@ description: | severity: Medium status: Available requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL @@ -31,5 +28,5 @@ entityMappings: fieldMappings: - identifier: Address columnName: IPCustomEntity -version: 1.0.1 +version: 1.0.2 kind: Scheduled \ No newline at end of file diff --git a/Solutions/ApacheHTTPServer/Analytic Rules/ApacheRequestToRareFile.yaml b/Solutions/ApacheHTTPServer/Analytic Rules/ApacheRequestToRareFile.yaml index 627b7ee1bf5..50213d47180 100644 --- a/Solutions/ApacheHTTPServer/Analytic Rules/ApacheRequestToRareFile.yaml +++ b/Solutions/ApacheHTTPServer/Analytic Rules/ApacheRequestToRareFile.yaml @@ -5,9 +5,6 @@ description: | severity: Medium status: Available requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL @@ -41,5 +38,5 @@ entityMappings: fieldMappings: - identifier: Url columnName: UrlCustomEntity -version: 1.0.1 +version: 1.0.2 kind: Scheduled \ No newline at end of file diff --git a/Solutions/ApacheHTTPServer/Analytic Rules/ApacheRequestToSensitiveFiles.yaml b/Solutions/ApacheHTTPServer/Analytic Rules/ApacheRequestToSensitiveFiles.yaml index 41eb2a2bde5..8789ea15168 100644 --- a/Solutions/ApacheHTTPServer/Analytic Rules/ApacheRequestToSensitiveFiles.yaml +++ b/Solutions/ApacheHTTPServer/Analytic Rules/ApacheRequestToSensitiveFiles.yaml @@ -5,9 +5,6 @@ description: | severity: Medium status: Available requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL @@ -35,5 +32,5 @@ entityMappings: fieldMappings: - identifier: Url columnName: UrlCustomEntity -version: 1.0.1 +version: 1.0.2 kind: Scheduled \ No newline at end of file diff --git a/Solutions/ApacheHTTPServer/Data/Solution_Apache Http Server.json b/Solutions/ApacheHTTPServer/Data/Solution_Apache Http Server.json index d341ae1269e..7f2dfc3820a 100644 --- a/Solutions/ApacheHTTPServer/Data/Solution_Apache Http Server.json +++ b/Solutions/ApacheHTTPServer/Data/Solution_Apache Http Server.json @@ -2,7 +2,7 @@ "Name": "ApacheHTTPServer", "Author": "Microsoft - support@microsoft.com", "Logo": "", - "Description": "The Apache HTTP Server solution provides the capability to ingest [Apache HTTP Server](http://httpd.apache.org/) events into Microsoft Sentinel. Refer to [Apache Logs documentation](https://httpd.apache.org/docs/2.4/logs.html) for more information.\n\n This solution is dependent on the Custom logs via AMA connector to collect the logs. The Custom logs solution will be installed as part of this solution installation. \n\n **NOTE**: Microsoft recommends installation of Custom logs via AMA Connector. Legacy connector uses the Log Analytics agent which is about to be deprecated by **Aug 31, 2024**. Using MMA and AMA on same machine can cause log duplication and extra ingestion cost [more details](https://learn.microsoft.com/azure/sentinel/ama-migrate?WT.mc_id=Portal-fx).", + "Description": "The Apache HTTP Server solution provides the capability to ingest [Apache HTTP Server](http://httpd.apache.org/) events into Microsoft Sentinel. Refer to [Apache Logs documentation](https://httpd.apache.org/docs/2.4/logs.html) for more information.\n\n This solution is dependent on the Custom logs via AMA connector to collect the logs. The Custom logs solution will be installed as part of this solution installation. \n\n **NOTE**: Microsoft recommends installation of Custom logs via AMA Connector. Legacy connector uses the Log Analytics agent which were deprecated on **Aug 31, 2024.** Using MMA and AMA on same machine can cause log duplication and extra ingestion cost [more details](https://learn.microsoft.com/azure/sentinel/ama-migrate?WT.mc_id=Portal-fx).", "Workbooks": [ "Workbooks/ApacheHTTPServer.json" ], @@ -21,9 +21,6 @@ "Hunting Queries/ApacheUrlClienterrors.yaml", "Hunting Queries/ApacheUrlServerErrors.yaml" ], - "Data Connectors": [ - "Data Connectors/Connector_ApacheHTTPServer_agent.json" - ], "Analytic Rules": [ "Analytic Rules/ApacheCVE-2021-41773.yaml", "Analytic Rules/ApacheCommandInURI.yaml", @@ -40,7 +37,7 @@ "azuresentinel.azure-sentinel-solution-customlogsviaama" ], "BasePath": "C:\\GitHub\\azure\\Solutions\\ApacheHTTPServer", - "Version": "3.0.0", + "Version": "3.0.1", "Metadata": "SolutionMetadata.json", "TemplateSpec": true } \ No newline at end of file diff --git a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheFilesErrorRequests.yaml b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheFilesErrorRequests.yaml index 7d45c50c6b1..989ff3e4ef8 100644 --- a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheFilesErrorRequests.yaml +++ b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheFilesErrorRequests.yaml @@ -4,9 +4,6 @@ description: | 'Query shows list of files with error requests.' severity: Medium requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL diff --git a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheFilesRequested.yaml b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheFilesRequested.yaml index 066b2e52735..26cad704d5d 100644 --- a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheFilesRequested.yaml +++ b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheFilesRequested.yaml @@ -4,9 +4,6 @@ description: | 'Query shows list of files requested' severity: Medium requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL diff --git a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRareFilesRequested.yaml b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRareFilesRequested.yaml index d90d43cef7f..ca2b76cd6e5 100644 --- a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRareFilesRequested.yaml +++ b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRareFilesRequested.yaml @@ -4,9 +4,6 @@ description: | 'Query detects rare files requested' severity: Medium requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL diff --git a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRareUAWithClientErrors.yaml b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRareUAWithClientErrors.yaml index 098ad0799fd..6d5219583b0 100644 --- a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRareUAWithClientErrors.yaml +++ b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRareUAWithClientErrors.yaml @@ -4,9 +4,6 @@ description: | 'Query shows rare user agent strings with client errors' severity: Medium requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL diff --git a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRareURLsRequested.yaml b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRareURLsRequested.yaml index b56aa52e42e..613d94932d3 100644 --- a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRareURLsRequested.yaml +++ b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRareURLsRequested.yaml @@ -4,9 +4,6 @@ description: | 'Query shows rare URLs requested.' severity: Medium requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL diff --git a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRareUserAgents.yaml b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRareUserAgents.yaml index 25fe1cc6dbf..ca172ce456c 100644 --- a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRareUserAgents.yaml +++ b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRareUserAgents.yaml @@ -4,9 +4,6 @@ description: | 'Query shows rare user agents' severity: Medium requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL diff --git a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRequestsToUnexistingFiles.yaml b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRequestsToUnexistingFiles.yaml index 2fc1f6a0770..c55487dca12 100644 --- a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRequestsToUnexistingFiles.yaml +++ b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheRequestsToUnexistingFiles.yaml @@ -4,9 +4,6 @@ description: | 'Query shows list of requests to unexisting files' severity: Medium requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL diff --git a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheUnexpectedPostRequests.yaml b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheUnexpectedPostRequests.yaml index 2332eee3a2d..e77c7f685d4 100644 --- a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheUnexpectedPostRequests.yaml +++ b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheUnexpectedPostRequests.yaml @@ -4,9 +4,6 @@ description: | 'Query detects Unexpected Post Requests' severity: Medium requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL diff --git a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheUrlClienterrors.yaml b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheUrlClienterrors.yaml index f9a52d728ce..1772826cc18 100644 --- a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheUrlClienterrors.yaml +++ b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheUrlClienterrors.yaml @@ -4,9 +4,6 @@ description: | 'Query shows URLs list with client errors.' severity: Medium requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL diff --git a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheUrlServerErrors.yaml b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheUrlServerErrors.yaml index bcb61135aa4..e954e8024e6 100644 --- a/Solutions/ApacheHTTPServer/Hunting Queries/ApacheUrlServerErrors.yaml +++ b/Solutions/ApacheHTTPServer/Hunting Queries/ApacheUrlServerErrors.yaml @@ -4,9 +4,6 @@ description: | 'Query shows URLs list with server errors.' severity: Medium requiredDataConnectors: - - connectorId: ApacheHTTPServer - dataTypes: - - ApacheHTTPServer - connectorId: CustomLogsAma datatypes: - ApacheHTTPServer_CL diff --git a/Solutions/ApacheHTTPServer/Package/3.0.1.zip b/Solutions/ApacheHTTPServer/Package/3.0.1.zip new file mode 100644 index 0000000000000000000000000000000000000000..22ca066d102b913fc1bfc7031acfadc715540b89 GIT binary patch literal 14543 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 QAb_7U_~**T`QP3D1<6>J^8f$< literal 0 HcmV?d00001 diff --git a/Solutions/ApacheHTTPServer/Package/createUiDefinition.json b/Solutions/ApacheHTTPServer/Package/createUiDefinition.json index 90b12b95c05..491ed8b568c 100644 --- a/Solutions/ApacheHTTPServer/Package/createUiDefinition.json +++ b/Solutions/ApacheHTTPServer/Package/createUiDefinition.json @@ -6,7 +6,7 @@ "config": { "isWizard": false, "basics": { - "description": "\n\n**Note:** Please refer to the following before installing the solution: \n\n• Review the solution [Release Notes](https://github.com/Azure/Azure-Sentinel/tree/master/Solutions/ApacheHTTPServer/ReleaseNotes.md)\n\n • There may be [known issues](https://aka.ms/sentinelsolutionsknownissues) pertaining to this Solution, please refer to them before installing.\n\nThe Apache HTTP Server solution provides the capability to ingest [Apache HTTP Server](http://httpd.apache.org/) events into Microsoft Sentinel. Refer to [Apache Logs documentation](https://httpd.apache.org/docs/2.4/logs.html) for more information.\n\n This solution is dependent on the Custom logs via AMA connector to collect the logs. The Custom logs solution will be installed as part of this solution installation. \n\n **NOTE**: Microsoft recommends installation of Custom logs via AMA Connector. Legacy connector uses the Log Analytics agent which is about to be deprecated by **Aug 31, 2024**. Using MMA and AMA on same machine can cause log duplication and extra ingestion cost [more details](https://learn.microsoft.com/azure/sentinel/ama-migrate?WT.mc_id=Portal-fx).\n\n**Data Connectors:** 1, **Parsers:** 1, **Workbooks:** 1, **Analytic Rules:** 10, **Hunting Queries:** 10\n\n[Learn more about Microsoft Sentinel](https://aka.ms/azuresentinel) | [Learn more about Solutions](https://aka.ms/azuresentinelsolutionsdoc)", + "description": "\n\n**Note:** Please refer to the following before installing the solution: \n\n• Review the solution [Release Notes](https://github.com/Azure/Azure-Sentinel/tree/master/Solutions/ApacheHTTPServer/ReleaseNotes.md)\n\n • There may be [known issues](https://aka.ms/sentinelsolutionsknownissues) pertaining to this Solution, please refer to them before installing.\n\nThe Apache HTTP Server solution provides the capability to ingest [Apache HTTP Server](http://httpd.apache.org/) events into Microsoft Sentinel. Refer to [Apache Logs documentation](https://httpd.apache.org/docs/2.4/logs.html) for more information.\n\n This solution is dependent on the Custom logs via AMA connector to collect the logs. The Custom logs solution will be installed as part of this solution installation. \n\n **NOTE**: Microsoft recommends installation of Custom logs via AMA Connector. Legacy connector uses the Log Analytics agent which were deprecated on **Aug 31, 2024.** Using MMA and AMA on same machine can cause log duplication and extra ingestion cost [more details](https://learn.microsoft.com/azure/sentinel/ama-migrate?WT.mc_id=Portal-fx).\n\n**Parsers:** 1, **Workbooks:** 1, **Analytic Rules:** 10, **Hunting Queries:** 10\n\n[Learn more about Microsoft Sentinel](https://aka.ms/azuresentinel) | [Learn more about Solutions](https://aka.ms/azuresentinelsolutionsdoc)", "subscription": { "resourceProviders": [ "Microsoft.OperationsManagement/solutions", @@ -51,37 +51,6 @@ } ], "steps": [ - { - "name": "dataconnectors", - "label": "Data Connectors", - "bladeTitle": "Data Connectors", - "elements": [ - { - "name": "dataconnectors1-text", - "type": "Microsoft.Common.TextBlock", - "options": { - "text": "This Solution installs the data connector for ApacheHTTPServer. You can get ApacheHTTPServer custom log data in your Microsoft Sentinel workspace. After installing the solution, configure and enable this data connector by following guidance in Manage solution view." - } - }, - { - "name": "dataconnectors-parser-text", - "type": "Microsoft.Common.TextBlock", - "options": { - "text": "The Solution installs a parser that transforms the ingested data into Microsoft Sentinel normalized format. The normalized format enables better correlation of different types of data from different data sources to drive end-to-end outcomes seamlessly in security monitoring, hunting, incident investigation and response scenarios in Microsoft Sentinel." - } - }, - { - "name": "dataconnectors-link2", - "type": "Microsoft.Common.TextBlock", - "options": { - "link": { - "label": "Learn more about connecting data sources", - "uri": "https://docs.microsoft.com/azure/sentinel/connect-data-sources" - } - } - } - ] - }, { "name": "workbooks", "label": "Workbooks", @@ -323,7 +292,7 @@ "name": "huntingquery1-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query shows list of files with error requests. This hunting query depends on ApacheHTTPServer CustomLogsAma data connector (ApacheHTTPServer ApacheHTTPServer_CL Parser or Table)" + "text": "Query shows list of files with error requests. This hunting query depends on CustomLogsAma data connector (ApacheHTTPServer_CL Parser or Table)" } } ] @@ -337,7 +306,7 @@ "name": "huntingquery2-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query shows list of files requested This hunting query depends on ApacheHTTPServer CustomLogsAma data connector (ApacheHTTPServer ApacheHTTPServer_CL Parser or Table)" + "text": "Query shows list of files requested This hunting query depends on CustomLogsAma data connector (ApacheHTTPServer_CL Parser or Table)" } } ] @@ -351,7 +320,7 @@ "name": "huntingquery3-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query detects rare files requested This hunting query depends on ApacheHTTPServer CustomLogsAma data connector (ApacheHTTPServer ApacheHTTPServer_CL Parser or Table)" + "text": "Query detects rare files requested This hunting query depends on CustomLogsAma data connector (ApacheHTTPServer_CL Parser or Table)" } } ] @@ -365,7 +334,7 @@ "name": "huntingquery4-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query shows rare user agent strings with client errors This hunting query depends on ApacheHTTPServer CustomLogsAma data connector (ApacheHTTPServer ApacheHTTPServer_CL Parser or Table)" + "text": "Query shows rare user agent strings with client errors This hunting query depends on CustomLogsAma data connector (ApacheHTTPServer_CL Parser or Table)" } } ] @@ -379,7 +348,7 @@ "name": "huntingquery5-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query shows rare URLs requested. This hunting query depends on ApacheHTTPServer CustomLogsAma data connector (ApacheHTTPServer ApacheHTTPServer_CL Parser or Table)" + "text": "Query shows rare URLs requested. This hunting query depends on CustomLogsAma data connector (ApacheHTTPServer_CL Parser or Table)" } } ] @@ -393,7 +362,7 @@ "name": "huntingquery6-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query shows rare user agents This hunting query depends on ApacheHTTPServer CustomLogsAma data connector (ApacheHTTPServer ApacheHTTPServer_CL Parser or Table)" + "text": "Query shows rare user agents This hunting query depends on CustomLogsAma data connector (ApacheHTTPServer_CL Parser or Table)" } } ] @@ -407,7 +376,7 @@ "name": "huntingquery7-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query shows list of requests to unexisting files This hunting query depends on ApacheHTTPServer CustomLogsAma data connector (ApacheHTTPServer ApacheHTTPServer_CL Parser or Table)" + "text": "Query shows list of requests to unexisting files This hunting query depends on CustomLogsAma data connector (ApacheHTTPServer_CL Parser or Table)" } } ] @@ -421,7 +390,7 @@ "name": "huntingquery8-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query detects Unexpected Post Requests This hunting query depends on ApacheHTTPServer CustomLogsAma data connector (ApacheHTTPServer ApacheHTTPServer_CL Parser or Table)" + "text": "Query detects Unexpected Post Requests This hunting query depends on CustomLogsAma data connector (ApacheHTTPServer_CL Parser or Table)" } } ] @@ -435,7 +404,7 @@ "name": "huntingquery9-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query shows URLs list with client errors. This hunting query depends on ApacheHTTPServer CustomLogsAma data connector (ApacheHTTPServer ApacheHTTPServer_CL Parser or Table)" + "text": "Query shows URLs list with client errors. This hunting query depends on CustomLogsAma data connector (ApacheHTTPServer_CL Parser or Table)" } } ] @@ -449,7 +418,7 @@ "name": "huntingquery10-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "Query shows URLs list with server errors. This hunting query depends on ApacheHTTPServer CustomLogsAma data connector (ApacheHTTPServer ApacheHTTPServer_CL Parser or Table)" + "text": "Query shows URLs list with server errors. This hunting query depends on CustomLogsAma data connector (ApacheHTTPServer_CL Parser or Table)" } } ] diff --git a/Solutions/ApacheHTTPServer/Package/mainTemplate.json b/Solutions/ApacheHTTPServer/Package/mainTemplate.json index 6f317339c63..b07b5abb1bd 100644 --- a/Solutions/ApacheHTTPServer/Package/mainTemplate.json +++ b/Solutions/ApacheHTTPServer/Package/mainTemplate.json @@ -41,7 +41,7 @@ "email": "support@microsoft.com", "_email": "[variables('email')]", "_solutionName": "ApacheHTTPServer", - "_solutionVersion": "3.0.0", + "_solutionVersion": "3.0.1", "solutionId": "azuresentinel.azure-sentinel-solution-apachehttpserver", "_solutionId": "[variables('solutionId')]", "workbookVersion1": "1.0.0", @@ -108,84 +108,75 @@ "_huntingQuerycontentId10": "ccdd22c6-3896-11ec-8d3d-0242ac130003", "huntingQueryTemplateSpecName10": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-hq-',uniquestring('ccdd22c6-3896-11ec-8d3d-0242ac130003')))]" }, - "uiConfigId1": "ApacheHTTPServer", - "_uiConfigId1": "[variables('uiConfigId1')]", - "dataConnectorContentId1": "ApacheHTTPServer", - "_dataConnectorContentId1": "[variables('dataConnectorContentId1')]", - "dataConnectorId1": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentId1'))]", - "_dataConnectorId1": "[variables('dataConnectorId1')]", - "dataConnectorTemplateSpecName1": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentId1'))))]", - "dataConnectorVersion1": "1.0.0", - "_dataConnectorcontentProductId1": "[concat(take(variables('_solutionId'),50),'-','dc','-', uniqueString(concat(variables('_solutionId'),'-','DataConnector','-',variables('_dataConnectorContentId1'),'-', variables('dataConnectorVersion1'))))]", "analyticRuleObject1": { - "analyticRuleVersion1": "1.0.2", + "analyticRuleVersion1": "1.0.3", "_analyticRulecontentId1": "767f9dc4-3b01-11ec-8d3d-0242ac130003", "analyticRuleId1": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', '767f9dc4-3b01-11ec-8d3d-0242ac130003')]", "analyticRuleTemplateSpecName1": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('767f9dc4-3b01-11ec-8d3d-0242ac130003')))]", - "_analyticRulecontentProductId1": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','767f9dc4-3b01-11ec-8d3d-0242ac130003','-', '1.0.2')))]" + "_analyticRulecontentProductId1": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','767f9dc4-3b01-11ec-8d3d-0242ac130003','-', '1.0.3')))]" }, "analyticRuleObject2": { - "analyticRuleVersion2": "1.0.2", + "analyticRuleVersion2": "1.0.3", "_analyticRulecontentId2": "54da6a42-3b00-11ec-8d3d-0242ac130003", "analyticRuleId2": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', '54da6a42-3b00-11ec-8d3d-0242ac130003')]", "analyticRuleTemplateSpecName2": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('54da6a42-3b00-11ec-8d3d-0242ac130003')))]", - "_analyticRulecontentProductId2": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','54da6a42-3b00-11ec-8d3d-0242ac130003','-', '1.0.2')))]" + "_analyticRulecontentProductId2": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','54da6a42-3b00-11ec-8d3d-0242ac130003','-', '1.0.3')))]" }, "analyticRuleObject3": { - "analyticRuleVersion3": "1.0.2", + "analyticRuleVersion3": "1.0.3", "_analyticRulecontentId3": "e9edfe1c-3afd-11ec-8d3d-0242ac130003", "analyticRuleId3": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', 'e9edfe1c-3afd-11ec-8d3d-0242ac130003')]", "analyticRuleTemplateSpecName3": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('e9edfe1c-3afd-11ec-8d3d-0242ac130003')))]", - "_analyticRulecontentProductId3": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','e9edfe1c-3afd-11ec-8d3d-0242ac130003','-', '1.0.2')))]" + "_analyticRulecontentProductId3": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','e9edfe1c-3afd-11ec-8d3d-0242ac130003','-', '1.0.3')))]" }, "analyticRuleObject4": { - "analyticRuleVersion4": "1.0.2", + "analyticRuleVersion4": "1.0.3", "_analyticRulecontentId4": "15f5a956-3af9-11ec-8d3d-0242ac130003", "analyticRuleId4": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', '15f5a956-3af9-11ec-8d3d-0242ac130003')]", "analyticRuleTemplateSpecName4": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('15f5a956-3af9-11ec-8d3d-0242ac130003')))]", - "_analyticRulecontentProductId4": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','15f5a956-3af9-11ec-8d3d-0242ac130003','-', '1.0.2')))]" + "_analyticRulecontentProductId4": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','15f5a956-3af9-11ec-8d3d-0242ac130003','-', '1.0.3')))]" }, "analyticRuleObject5": { - "analyticRuleVersion5": "1.0.2", + "analyticRuleVersion5": "1.0.3", "_analyticRulecontentId5": "1bf246a2-3af9-11ec-8d3d-0242ac130003", "analyticRuleId5": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', '1bf246a2-3af9-11ec-8d3d-0242ac130003')]", "analyticRuleTemplateSpecName5": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('1bf246a2-3af9-11ec-8d3d-0242ac130003')))]", - "_analyticRulecontentProductId5": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','1bf246a2-3af9-11ec-8d3d-0242ac130003','-', '1.0.2')))]" + "_analyticRulecontentProductId5": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','1bf246a2-3af9-11ec-8d3d-0242ac130003','-', '1.0.3')))]" }, "analyticRuleObject6": { - "analyticRuleVersion6": "1.0.2", + "analyticRuleVersion6": "1.0.3", "_analyticRulecontentId6": "db5f16f0-3afe-11ec-8d3d-0242ac130003", "analyticRuleId6": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', 'db5f16f0-3afe-11ec-8d3d-0242ac130003')]", "analyticRuleTemplateSpecName6": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('db5f16f0-3afe-11ec-8d3d-0242ac130003')))]", - "_analyticRulecontentProductId6": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','db5f16f0-3afe-11ec-8d3d-0242ac130003','-', '1.0.2')))]" + "_analyticRulecontentProductId6": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','db5f16f0-3afe-11ec-8d3d-0242ac130003','-', '1.0.3')))]" }, "analyticRuleObject7": { - "analyticRuleVersion7": "1.0.1", + "analyticRuleVersion7": "1.0.2", "_analyticRulecontentId7": "c5d69e46-3b00-11ec-8d3d-0242ac130003", "analyticRuleId7": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', 'c5d69e46-3b00-11ec-8d3d-0242ac130003')]", "analyticRuleTemplateSpecName7": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('c5d69e46-3b00-11ec-8d3d-0242ac130003')))]", - "_analyticRulecontentProductId7": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','c5d69e46-3b00-11ec-8d3d-0242ac130003','-', '1.0.1')))]" + "_analyticRulecontentProductId7": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','c5d69e46-3b00-11ec-8d3d-0242ac130003','-', '1.0.2')))]" }, "analyticRuleObject8": { - "analyticRuleVersion8": "1.0.1", + "analyticRuleVersion8": "1.0.2", "_analyticRulecontentId8": "a0077556-3aff-11ec-8d3d-0242ac130003", "analyticRuleId8": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', 'a0077556-3aff-11ec-8d3d-0242ac130003')]", "analyticRuleTemplateSpecName8": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('a0077556-3aff-11ec-8d3d-0242ac130003')))]", - "_analyticRulecontentProductId8": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','a0077556-3aff-11ec-8d3d-0242ac130003','-', '1.0.1')))]" + "_analyticRulecontentProductId8": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','a0077556-3aff-11ec-8d3d-0242ac130003','-', '1.0.2')))]" }, "analyticRuleObject9": { - "analyticRuleVersion9": "1.0.1", + "analyticRuleVersion9": "1.0.2", "_analyticRulecontentId9": "14d7e15e-3afb-11ec-8d3d-0242ac130003", "analyticRuleId9": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', '14d7e15e-3afb-11ec-8d3d-0242ac130003')]", "analyticRuleTemplateSpecName9": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('14d7e15e-3afb-11ec-8d3d-0242ac130003')))]", - "_analyticRulecontentProductId9": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','14d7e15e-3afb-11ec-8d3d-0242ac130003','-', '1.0.1')))]" + "_analyticRulecontentProductId9": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','14d7e15e-3afb-11ec-8d3d-0242ac130003','-', '1.0.2')))]" }, "analyticRuleObject10": { - "analyticRuleVersion10": "1.0.1", + "analyticRuleVersion10": "1.0.2", "_analyticRulecontentId10": "d1c52578-3afc-11ec-8d3d-0242ac130003", "analyticRuleId10": "[resourceId('Microsoft.SecurityInsights/AlertRuleTemplates', 'd1c52578-3afc-11ec-8d3d-0242ac130003')]", "analyticRuleTemplateSpecName10": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-ar-',uniquestring('d1c52578-3afc-11ec-8d3d-0242ac130003')))]", - "_analyticRulecontentProductId10": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','d1c52578-3afc-11ec-8d3d-0242ac130003','-', '1.0.1')))]" + "_analyticRulecontentProductId10": "[concat(take(variables('_solutionId'),50),'-','ar','-', uniqueString(concat(variables('_solutionId'),'-','AnalyticsRule','-','d1c52578-3afc-11ec-8d3d-0242ac130003','-', '1.0.2')))]" }, "_solutioncontentProductId": "[concat(take(variables('_solutionId'),50),'-','sl','-', uniqueString(concat(variables('_solutionId'),'-','Solution','-',variables('_solutionId'),'-', variables('_solutionVersion'))))]" }, @@ -199,7 +190,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheHTTPServer Workbook with template version 3.0.0", + "description": "ApacheHTTPServer Workbook with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('workbookVersion1')]", @@ -287,7 +278,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheHTTPServer Data Parser with template version 3.0.0", + "description": "ApacheHTTPServer Data Parser with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('parserObject1').parserVersion1]", @@ -301,7 +292,7 @@ "location": "[parameters('workspace-location')]", "properties": { "eTag": "*", - "displayName": "ApacheHTTPServer", + "displayName": "Parser for ApacheHTTPServer", "category": "Microsoft Sentinel Parser", "functionAlias": "ApacheHTTPServer", "query": "let apache_accesslog_events =() {\nApacheHTTPServer_CL\n| where RawData matches regex @'(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}).*\\[.*\\]\\s\\\"(GET|POST).*?\\\"\\s([1-5][0-9]{2})\\s(\\d+)\\s\\\"(.*?)\\\"\\s\\\"(.*?)\\\".*'\n| extend EventProduct = 'Apache'\n| extend EventType = 'AccessLog'\n| extend EventData = split(RawData, '\"')\n| extend SubEventData0 = split(trim_start(@' ', (trim_end(@' ', tostring(EventData[0])))), ' ')\n| extend SubEventData1 = split(EventData[1], ' ')\n| extend SubEventData2 = split(trim_start(@' ', (trim_end(@' ', tostring(EventData[2])))), ' ')\n| extend SrcIpAddr = tostring(SubEventData0[0])\n| extend ClientIdentity = SubEventData0[1]\n| extend SrcUserName = SubEventData0[2]\n| extend EventStartTime = todatetime(replace(@'\\/', @'-', replace(@'(\\d{2}\\/\\w{3}\\/\\d{4}):(\\d{2}\\:\\d{2}\\:\\d{2})', @'\\1 \\2', extract(@'\\[(.*?)\\+\\d+\\]', 1, RawData))))\n//| extend EventStartTime = strcat(SubEventData0[3], SubEventData0[4])\n| extend HttpRequestMethod = SubEventData1[0]\n| extend UrlOriginal = SubEventData1[1]\n| extend HttpVersion = SubEventData1[2]\n| extend HttpStatusCode = SubEventData2[0]\n| extend HttpResponseBodyBytes = SubEventData2[1]\n| extend HttpReferrerOriginal = EventData[3]\n| extend HttpUserAgentOriginal = EventData[5]\n};\nlet apache_errorlog_events=() {\nApacheHTTPServer_CL\n| where RawData matches regex @'\\A\\[.*?\\]\\s\\[.*\\]\\s\\[.*\\].*'\n| extend EventProduct = 'Apache'\n| extend EventType = 'ErrorLog'\n| extend EventSeverity = 'Error'\n| extend EventStartTime = todatetime(extract(@'\\[\\w{3}\\s(.*?)\\]', 1, RawData))\n| extend SrcIpAddr = extract(@'\\[client (\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})\\]', 1, RawData)\n| extend EventMessage = extract(@'\\[client \\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\]\\s(.*)', 1, RawData)\n};\nunion isfuzzy=true apache_accesslog_events, apache_errorlog_events\n| project TimeGenerated\n , EventProduct\n , EventType\n , EventSeverity\n , EventStartTime\n , SrcIpAddr\n , ClientIdentity\n , SrcUserName\n , HttpRequestMethod\n , UrlOriginal\n , HttpVersion\n , HttpStatusCode\n , HttpResponseBodyBytes\n , HttpReferrerOriginal\n , HttpUserAgentOriginal\n\t\t, EventMessage\n", @@ -353,7 +344,7 @@ "contentSchemaVersion": "3.0.0", "contentId": "[variables('parserObject1').parserContentId1]", "contentKind": "Parser", - "displayName": "ApacheHTTPServer", + "displayName": "Parser for ApacheHTTPServer", "contentProductId": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject1').parserContentId1,'-', '1.0.0')))]", "id": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject1').parserContentId1,'-', '1.0.0')))]", "version": "[variables('parserObject1').parserVersion1]" @@ -366,7 +357,7 @@ "location": "[parameters('workspace-location')]", "properties": { "eTag": "*", - "displayName": "ApacheHTTPServer", + "displayName": "Parser for ApacheHTTPServer", "category": "Microsoft Sentinel Parser", "functionAlias": "ApacheHTTPServer", "query": "let apache_accesslog_events =() {\nApacheHTTPServer_CL\n| where RawData matches regex @'(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}).*\\[.*\\]\\s\\\"(GET|POST).*?\\\"\\s([1-5][0-9]{2})\\s(\\d+)\\s\\\"(.*?)\\\"\\s\\\"(.*?)\\\".*'\n| extend EventProduct = 'Apache'\n| extend EventType = 'AccessLog'\n| extend EventData = split(RawData, '\"')\n| extend SubEventData0 = split(trim_start(@' ', (trim_end(@' ', tostring(EventData[0])))), ' ')\n| extend SubEventData1 = split(EventData[1], ' ')\n| extend SubEventData2 = split(trim_start(@' ', (trim_end(@' ', tostring(EventData[2])))), ' ')\n| extend SrcIpAddr = tostring(SubEventData0[0])\n| extend ClientIdentity = SubEventData0[1]\n| extend SrcUserName = SubEventData0[2]\n| extend EventStartTime = todatetime(replace(@'\\/', @'-', replace(@'(\\d{2}\\/\\w{3}\\/\\d{4}):(\\d{2}\\:\\d{2}\\:\\d{2})', @'\\1 \\2', extract(@'\\[(.*?)\\+\\d+\\]', 1, RawData))))\n//| extend EventStartTime = strcat(SubEventData0[3], SubEventData0[4])\n| extend HttpRequestMethod = SubEventData1[0]\n| extend UrlOriginal = SubEventData1[1]\n| extend HttpVersion = SubEventData1[2]\n| extend HttpStatusCode = SubEventData2[0]\n| extend HttpResponseBodyBytes = SubEventData2[1]\n| extend HttpReferrerOriginal = EventData[3]\n| extend HttpUserAgentOriginal = EventData[5]\n};\nlet apache_errorlog_events=() {\nApacheHTTPServer_CL\n| where RawData matches regex @'\\A\\[.*?\\]\\s\\[.*\\]\\s\\[.*\\].*'\n| extend EventProduct = 'Apache'\n| extend EventType = 'ErrorLog'\n| extend EventSeverity = 'Error'\n| extend EventStartTime = todatetime(extract(@'\\[\\w{3}\\s(.*?)\\]', 1, RawData))\n| extend SrcIpAddr = extract(@'\\[client (\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})\\]', 1, RawData)\n| extend EventMessage = extract(@'\\[client \\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\]\\s(.*)', 1, RawData)\n};\nunion isfuzzy=true apache_accesslog_events, apache_errorlog_events\n| project TimeGenerated\n , EventProduct\n , EventType\n , EventSeverity\n , EventStartTime\n , SrcIpAddr\n , ClientIdentity\n , SrcUserName\n , HttpRequestMethod\n , UrlOriginal\n , HttpVersion\n , HttpStatusCode\n , HttpResponseBodyBytes\n , HttpReferrerOriginal\n , HttpUserAgentOriginal\n\t\t, EventMessage\n", @@ -419,7 +410,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheFilesErrorRequests_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ApacheFilesErrorRequests_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject1').huntingQueryVersion1]", @@ -504,7 +495,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheFilesRequested_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ApacheFilesRequested_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject2').huntingQueryVersion2]", @@ -589,7 +580,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheRareFilesRequested_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ApacheRareFilesRequested_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject3').huntingQueryVersion3]", @@ -674,7 +665,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheRareUAWithClientErrors_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ApacheRareUAWithClientErrors_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject4').huntingQueryVersion4]", @@ -759,7 +750,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheRareURLsRequested_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ApacheRareURLsRequested_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject5').huntingQueryVersion5]", @@ -844,7 +835,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheRareUserAgents_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ApacheRareUserAgents_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject6').huntingQueryVersion6]", @@ -929,7 +920,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheRequestsToUnexistingFiles_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ApacheRequestsToUnexistingFiles_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject7').huntingQueryVersion7]", @@ -1014,7 +1005,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheUnexpectedPostRequests_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ApacheUnexpectedPostRequests_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject8').huntingQueryVersion8]", @@ -1099,7 +1090,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheUrlClienterrors_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ApacheUrlClienterrors_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject9').huntingQueryVersion9]", @@ -1184,7 +1175,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheUrlServerErrors_HuntingQueries Hunting Query with template version 3.0.0", + "description": "ApacheUrlServerErrors_HuntingQueries Hunting Query with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('huntingQueryObject10').huntingQueryVersion10]", @@ -1260,423 +1251,6 @@ "version": "1.0.0" } }, - { - "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", - "apiVersion": "2023-04-01-preview", - "name": "[variables('dataConnectorTemplateSpecName1')]", - "location": "[parameters('workspace-location')]", - "dependsOn": [ - "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" - ], - "properties": { - "description": "ApacheHTTPServer data connector with template version 3.0.0", - "mainTemplate": { - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", - "contentVersion": "[variables('dataConnectorVersion1')]", - "parameters": {}, - "variables": {}, - "resources": [ - { - "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',variables('_dataConnectorContentId1'))]", - "apiVersion": "2021-03-01-preview", - "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", - "location": "[parameters('workspace-location')]", - "kind": "GenericUI", - "properties": { - "connectorUiConfig": { - "id": "[variables('_uiConfigId1')]", - "title": "[Deprecated] Apache HTTP Server", - "publisher": "Apache", - "descriptionMarkdown": "The Apache HTTP Server data connector provides the capability to ingest [Apache HTTP Server](http://httpd.apache.org/) events into Microsoft Sentinel. Refer to [Apache Logs documentation](https://httpd.apache.org/docs/2.4/logs.html) for more information.", - "additionalRequirementBanner": "These queries are dependent on a parser based on a Kusto Function deployed as part of the solution.", - "graphQueries": [ - { - "metricName": "Total data received", - "legend": "ApacheHTTPServer_CL", - "baseQuery": "ApacheHTTPServer" - } - ], - "sampleQueries": [ - { - "description": "Top 10 Clients (Source IP)", - "query": "ApacheHTTPServer\n | summarize count() by SrcIpAddr\n | top 10 by count_" - } - ], - "dataTypes": [ - { - "name": "ApacheHTTPServer_CL", - "lastDataReceivedQuery": "ApacheHTTPServer\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" - } - ], - "connectivityCriterias": [ - { - "type": "IsConnectedQuery", - "value": [ - "ApacheHTTPServer\n | summarize LastLogReceived = max(TimeGenerated)\n | project IsConnected = LastLogReceived > ago(30d)" - ] - } - ], - "availability": { - "status": 1, - "isPreview": false - }, - "permissions": { - "resourceProvider": [ - { - "provider": "Microsoft.OperationalInsights/workspaces", - "permissionsDisplayText": "read and write permissions are required.", - "providerDisplayName": "Workspace", - "scope": "Workspace", - "requiredPermissions": { - "write": true, - "read": true, - "delete": true - } - }, - { - "provider": "Microsoft.OperationalInsights/workspaces/sharedKeys", - "permissionsDisplayText": "read permissions to shared keys for the workspace are required. [See the documentation to learn more about workspace keys](https://docs.microsoft.com/azure/azure-monitor/platform/agent-windows#obtain-workspace-id-and-key).", - "providerDisplayName": "Keys", - "scope": "Workspace", - "requiredPermissions": { - "action": true - } - } - ] - }, - "instructionSteps": [ - { - "description": ">**NOTE:** This data connector depends on a parser based on a Kusto Function to work as expected which is deployed as part of the solution. To view the function code in Log Analytics, open Log Analytics/Microsoft Sentinel Logs blade, click Functions and search for the alias ApacheHTTPServer and load the function code or click [here](https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/ApacheHTTPServer/Parsers/ApacheHTTPServer.txt). The function usually takes 10-15 minutes to activate after solution installation/update." - }, - { - "description": "Install the agent on the Apache HTTP Server where the logs are generated.\n\n> Logs from Apache HTTP Server deployed on Linux or Windows servers are collected by **Linux** or **Windows** agents.", - "instructions": [ - { - "parameters": { - "title": "Choose where to install the Linux agent:", - "instructionSteps": [ - { - "title": "Install agent on Azure Linux Virtual Machine", - "description": "Select the machine to install the agent on and then click **Connect**.", - "instructions": [ - { - "parameters": { - "linkType": "InstallAgentOnLinuxVirtualMachine" - }, - "type": "InstallAgent" - } - ] - }, - { - "title": "Install agent on a non-Azure Linux Machine", - "description": "Download the agent on the relevant machine and follow the instructions.", - "instructions": [ - { - "parameters": { - "linkType": "InstallAgentOnLinuxNonAzure" - }, - "type": "InstallAgent" - } - ] - } - ] - }, - "type": "InstructionStepsGroup" - } - ], - "title": "1. Install and onboard the agent for Linux or Windows" - }, - { - "instructions": [ - { - "parameters": { - "title": "Choose where to install the Windows agent:", - "instructionSteps": [ - { - "title": "Install agent on Azure Windows Virtual Machine", - "description": "Select the machine to install the agent on and then click **Connect**.", - "instructions": [ - { - "parameters": { - "linkType": "InstallAgentOnVirtualMachine" - }, - "type": "InstallAgent" - } - ] - }, - { - "title": "Install agent on a non-Azure Windows Machine", - "description": "Download the agent on the relevant machine and follow the instructions.", - "instructions": [ - { - "parameters": { - "linkType": "InstallAgentOnNonAzure" - }, - "type": "InstallAgent" - } - ] - } - ] - }, - "type": "InstructionStepsGroup" - } - ] - }, - { - "description": "Configure the custom log directory to be collected", - "instructions": [ - { - "parameters": { - "linkType": "OpenCustomLogsSettings" - }, - "type": "InstallAgent" - } - ], - "title": "2. Configure the logs to be collected" - }, - { - "description": "1. Select the link above to open your workspace advanced settings \n2. From the left pane, select **Data**, select **Custom Logs** and click **Add+**\n3. Click **Browse** to upload a sample of a Apache HTTP Server log file (e.g. access.log or error.log). Then, click **Next >**\n4. Select **New line** as the record delimiter and click **Next >**\n5. Select **Windows** or **Linux** and enter the path to Apache HTTP logs based on your configuration. Example: \n - **Windows** directory: `C:\\Server\\bin\\Apache24\\logs\\*.log`\n - **Linux** Directory: `/var/log/httpd/*.log` \n6. After entering the path, click the '+' symbol to apply, then click **Next >** \n7. Add **ApacheHTTPServer_CL** as the custom log Name and click **Done**" - } - ] - } - } - }, - { - "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "apiVersion": "2023-04-01-preview", - "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', last(split(variables('_dataConnectorId1'),'/'))))]", - "properties": { - "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentId1'))]", - "contentId": "[variables('_dataConnectorContentId1')]", - "kind": "DataConnector", - "version": "[variables('dataConnectorVersion1')]", - "source": { - "kind": "Solution", - "name": "ApacheHTTPServer", - "sourceId": "[variables('_solutionId')]" - }, - "author": { - "name": "Microsoft", - "email": "[variables('_email')]" - }, - "support": { - "name": "Microsoft Corporation", - "email": "support@microsoft.com", - "tier": "Microsoft", - "link": "https://support.microsoft.com" - } - } - } - ] - }, - "packageKind": "Solution", - "packageVersion": "[variables('_solutionVersion')]", - "packageName": "[variables('_solutionName')]", - "packageId": "[variables('_solutionId')]", - "contentSchemaVersion": "3.0.0", - "contentId": "[variables('_dataConnectorContentId1')]", - "contentKind": "DataConnector", - "displayName": "[Deprecated] Apache HTTP Server", - "contentProductId": "[variables('_dataConnectorcontentProductId1')]", - "id": "[variables('_dataConnectorcontentProductId1')]", - "version": "[variables('dataConnectorVersion1')]" - } - }, - { - "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "apiVersion": "2023-04-01-preview", - "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', last(split(variables('_dataConnectorId1'),'/'))))]", - "dependsOn": [ - "[variables('_dataConnectorId1')]" - ], - "location": "[parameters('workspace-location')]", - "properties": { - "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentId1'))]", - "contentId": "[variables('_dataConnectorContentId1')]", - "kind": "DataConnector", - "version": "[variables('dataConnectorVersion1')]", - "source": { - "kind": "Solution", - "name": "ApacheHTTPServer", - "sourceId": "[variables('_solutionId')]" - }, - "author": { - "name": "Microsoft", - "email": "[variables('_email')]" - }, - "support": { - "name": "Microsoft Corporation", - "email": "support@microsoft.com", - "tier": "Microsoft", - "link": "https://support.microsoft.com" - } - } - }, - { - "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',variables('_dataConnectorContentId1'))]", - "apiVersion": "2021-03-01-preview", - "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", - "location": "[parameters('workspace-location')]", - "kind": "GenericUI", - "properties": { - "connectorUiConfig": { - "title": "[Deprecated] Apache HTTP Server", - "publisher": "Apache", - "descriptionMarkdown": "The Apache HTTP Server data connector provides the capability to ingest [Apache HTTP Server](http://httpd.apache.org/) events into Microsoft Sentinel. Refer to [Apache Logs documentation](https://httpd.apache.org/docs/2.4/logs.html) for more information.", - "graphQueries": [ - { - "metricName": "Total data received", - "legend": "ApacheHTTPServer_CL", - "baseQuery": "ApacheHTTPServer" - } - ], - "dataTypes": [ - { - "name": "ApacheHTTPServer_CL", - "lastDataReceivedQuery": "ApacheHTTPServer\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" - } - ], - "connectivityCriterias": [ - { - "type": "IsConnectedQuery", - "value": [ - "ApacheHTTPServer\n | summarize LastLogReceived = max(TimeGenerated)\n | project IsConnected = LastLogReceived > ago(30d)" - ] - } - ], - "sampleQueries": [ - { - "description": "Top 10 Clients (Source IP)", - "query": "ApacheHTTPServer\n | summarize count() by SrcIpAddr\n | top 10 by count_" - } - ], - "availability": { - "status": 1, - "isPreview": false - }, - "permissions": { - "resourceProvider": [ - { - "provider": "Microsoft.OperationalInsights/workspaces", - "permissionsDisplayText": "read and write permissions are required.", - "providerDisplayName": "Workspace", - "scope": "Workspace", - "requiredPermissions": { - "write": true, - "read": true, - "delete": true - } - }, - { - "provider": "Microsoft.OperationalInsights/workspaces/sharedKeys", - "permissionsDisplayText": "read permissions to shared keys for the workspace are required. [See the documentation to learn more about workspace keys](https://docs.microsoft.com/azure/azure-monitor/platform/agent-windows#obtain-workspace-id-and-key).", - "providerDisplayName": "Keys", - "scope": "Workspace", - "requiredPermissions": { - "action": true - } - } - ] - }, - "instructionSteps": [ - { - "description": ">**NOTE:** This data connector depends on a parser based on a Kusto Function to work as expected which is deployed as part of the solution. To view the function code in Log Analytics, open Log Analytics/Microsoft Sentinel Logs blade, click Functions and search for the alias ApacheHTTPServer and load the function code or click [here](https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/ApacheHTTPServer/Parsers/ApacheHTTPServer.txt). The function usually takes 10-15 minutes to activate after solution installation/update." - }, - { - "description": "Install the agent on the Apache HTTP Server where the logs are generated.\n\n> Logs from Apache HTTP Server deployed on Linux or Windows servers are collected by **Linux** or **Windows** agents.", - "instructions": [ - { - "parameters": { - "title": "Choose where to install the Linux agent:", - "instructionSteps": [ - { - "title": "Install agent on Azure Linux Virtual Machine", - "description": "Select the machine to install the agent on and then click **Connect**.", - "instructions": [ - { - "parameters": { - "linkType": "InstallAgentOnLinuxVirtualMachine" - }, - "type": "InstallAgent" - } - ] - }, - { - "title": "Install agent on a non-Azure Linux Machine", - "description": "Download the agent on the relevant machine and follow the instructions.", - "instructions": [ - { - "parameters": { - "linkType": "InstallAgentOnLinuxNonAzure" - }, - "type": "InstallAgent" - } - ] - } - ] - }, - "type": "InstructionStepsGroup" - } - ], - "title": "1. Install and onboard the agent for Linux or Windows" - }, - { - "instructions": [ - { - "parameters": { - "title": "Choose where to install the Windows agent:", - "instructionSteps": [ - { - "title": "Install agent on Azure Windows Virtual Machine", - "description": "Select the machine to install the agent on and then click **Connect**.", - "instructions": [ - { - "parameters": { - "linkType": "InstallAgentOnVirtualMachine" - }, - "type": "InstallAgent" - } - ] - }, - { - "title": "Install agent on a non-Azure Windows Machine", - "description": "Download the agent on the relevant machine and follow the instructions.", - "instructions": [ - { - "parameters": { - "linkType": "InstallAgentOnNonAzure" - }, - "type": "InstallAgent" - } - ] - } - ] - }, - "type": "InstructionStepsGroup" - } - ] - }, - { - "description": "Configure the custom log directory to be collected", - "instructions": [ - { - "parameters": { - "linkType": "OpenCustomLogsSettings" - }, - "type": "InstallAgent" - } - ], - "title": "2. Configure the logs to be collected" - }, - { - "description": "1. Select the link above to open your workspace advanced settings \n2. From the left pane, select **Data**, select **Custom Logs** and click **Add+**\n3. Click **Browse** to upload a sample of a Apache HTTP Server log file (e.g. access.log or error.log). Then, click **Next >**\n4. Select **New line** as the record delimiter and click **Next >**\n5. Select **Windows** or **Linux** and enter the path to Apache HTTP logs based on your configuration. Example: \n - **Windows** directory: `C:\\Server\\bin\\Apache24\\logs\\*.log`\n - **Linux** Directory: `/var/log/httpd/*.log` \n6. After entering the path, click the '+' symbol to apply, then click **Next >** \n7. Add **ApacheHTTPServer_CL** as the custom log Name and click **Done**" - } - ], - "id": "[variables('_uiConfigId1')]", - "additionalRequirementBanner": "These queries are dependent on a parser based on a Kusto Function deployed as part of the solution." - } - } - }, { "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", "apiVersion": "2023-04-01-preview", @@ -1686,7 +1260,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheCVE-2021-41773_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ApacheCVE-2021-41773_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject1').analyticRuleVersion1]", @@ -1713,12 +1287,6 @@ "triggerThreshold": 0, "status": "Available", "requiredDataConnectors": [ - { - "connectorId": "ApacheHTTPServer", - "dataTypes": [ - "ApacheHTTPServer" - ] - }, { "connectorId": "CustomLogsAma", "datatypes": [ @@ -1737,13 +1305,13 @@ ], "entityMappings": [ { - "entityType": "URL", "fieldMappings": [ { - "identifier": "Url", - "columnName": "UrlCustomEntity" + "columnName": "UrlCustomEntity", + "identifier": "Url" } - ] + ], + "entityType": "URL" } ] } @@ -1799,7 +1367,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheCommandInURI_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ApacheCommandInURI_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject2').analyticRuleVersion2]", @@ -1826,12 +1394,6 @@ "triggerThreshold": 0, "status": "Available", "requiredDataConnectors": [ - { - "connectorId": "ApacheHTTPServer", - "dataTypes": [ - "ApacheHTTPServer" - ] - }, { "connectorId": "CustomLogsAma", "datatypes": [ @@ -1848,13 +1410,13 @@ ], "entityMappings": [ { - "entityType": "URL", "fieldMappings": [ { - "identifier": "Url", - "columnName": "UrlCustomEntity" + "columnName": "UrlCustomEntity", + "identifier": "Url" } - ] + ], + "entityType": "URL" } ] } @@ -1910,7 +1472,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheKnownMaliciousUserAgents_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ApacheKnownMaliciousUserAgents_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject3').analyticRuleVersion3]", @@ -1937,12 +1499,6 @@ "triggerThreshold": 0, "status": "Available", "requiredDataConnectors": [ - { - "connectorId": "ApacheHTTPServer", - "dataTypes": [ - "ApacheHTTPServer" - ] - }, { "connectorId": "CustomLogsAma", "datatypes": [ @@ -1959,13 +1515,13 @@ ], "entityMappings": [ { - "entityType": "IP", "fieldMappings": [ { - "identifier": "Address", - "columnName": "IPCustomEntity" + "columnName": "IPCustomEntity", + "identifier": "Address" } - ] + ], + "entityType": "IP" } ] } @@ -2021,7 +1577,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheMultipleClientErrorsFromSingleIP_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ApacheMultipleClientErrorsFromSingleIP_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject4').analyticRuleVersion4]", @@ -2048,12 +1604,6 @@ "triggerThreshold": 0, "status": "Available", "requiredDataConnectors": [ - { - "connectorId": "ApacheHTTPServer", - "dataTypes": [ - "ApacheHTTPServer" - ] - }, { "connectorId": "CustomLogsAma", "datatypes": [ @@ -2070,13 +1620,13 @@ ], "entityMappings": [ { - "entityType": "IP", "fieldMappings": [ { - "identifier": "Address", - "columnName": "IPCustomEntity" + "columnName": "IPCustomEntity", + "identifier": "Address" } - ] + ], + "entityType": "IP" } ] } @@ -2132,7 +1682,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheMultipleServerErrorsRequestsFromSingleIP_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ApacheMultipleServerErrorsRequestsFromSingleIP_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject5').analyticRuleVersion5]", @@ -2159,12 +1709,6 @@ "triggerThreshold": 0, "status": "Available", "requiredDataConnectors": [ - { - "connectorId": "ApacheHTTPServer", - "dataTypes": [ - "ApacheHTTPServer" - ] - }, { "connectorId": "CustomLogsAma", "datatypes": [ @@ -2183,13 +1727,13 @@ ], "entityMappings": [ { - "entityType": "IP", "fieldMappings": [ { - "identifier": "Address", - "columnName": "IPCustomEntity" + "columnName": "IPCustomEntity", + "identifier": "Address" } - ] + ], + "entityType": "IP" } ] } @@ -2245,7 +1789,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApachePrivateIpInUrl_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ApachePrivateIpInUrl_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject6').analyticRuleVersion6]", @@ -2272,12 +1816,6 @@ "triggerThreshold": 0, "status": "Available", "requiredDataConnectors": [ - { - "connectorId": "ApacheHTTPServer", - "dataTypes": [ - "ApacheHTTPServer" - ] - }, { "connectorId": "CustomLogsAma", "datatypes": [ @@ -2294,13 +1832,13 @@ ], "entityMappings": [ { - "entityType": "URL", "fieldMappings": [ { - "identifier": "Url", - "columnName": "UrlCustomEntity" + "columnName": "UrlCustomEntity", + "identifier": "Url" } - ] + ], + "entityType": "URL" } ] } @@ -2356,7 +1894,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApachePutSuspiciousFiles_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ApachePutSuspiciousFiles_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject7').analyticRuleVersion7]", @@ -2383,12 +1921,6 @@ "triggerThreshold": 0, "status": "Available", "requiredDataConnectors": [ - { - "connectorId": "ApacheHTTPServer", - "dataTypes": [ - "ApacheHTTPServer" - ] - }, { "connectorId": "CustomLogsAma", "datatypes": [ @@ -2407,22 +1939,22 @@ ], "entityMappings": [ { - "entityType": "File", "fieldMappings": [ { - "identifier": "Name", - "columnName": "FileCustomEntity" + "columnName": "FileCustomEntity", + "identifier": "Name" } - ] + ], + "entityType": "File" }, { - "entityType": "URL", "fieldMappings": [ { - "identifier": "Url", - "columnName": "UrlCustomEntity" + "columnName": "UrlCustomEntity", + "identifier": "Url" } - ] + ], + "entityType": "URL" } ] } @@ -2478,7 +2010,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheRequestFromPrivateIP_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ApacheRequestFromPrivateIP_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject8').analyticRuleVersion8]", @@ -2505,12 +2037,6 @@ "triggerThreshold": 0, "status": "Available", "requiredDataConnectors": [ - { - "connectorId": "ApacheHTTPServer", - "dataTypes": [ - "ApacheHTTPServer" - ] - }, { "connectorId": "CustomLogsAma", "datatypes": [ @@ -2529,13 +2055,13 @@ ], "entityMappings": [ { - "entityType": "IP", "fieldMappings": [ { - "identifier": "Address", - "columnName": "IPCustomEntity" + "columnName": "IPCustomEntity", + "identifier": "Address" } - ] + ], + "entityType": "IP" } ] } @@ -2591,7 +2117,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheRequestToRareFile_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ApacheRequestToRareFile_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject9').analyticRuleVersion9]", @@ -2618,12 +2144,6 @@ "triggerThreshold": 0, "status": "Available", "requiredDataConnectors": [ - { - "connectorId": "ApacheHTTPServer", - "dataTypes": [ - "ApacheHTTPServer" - ] - }, { "connectorId": "CustomLogsAma", "datatypes": [ @@ -2640,22 +2160,22 @@ ], "entityMappings": [ { - "entityType": "File", "fieldMappings": [ { - "identifier": "Name", - "columnName": "FileCustomEntity" + "columnName": "FileCustomEntity", + "identifier": "Name" } - ] + ], + "entityType": "File" }, { - "entityType": "URL", "fieldMappings": [ { - "identifier": "Url", - "columnName": "UrlCustomEntity" + "columnName": "UrlCustomEntity", + "identifier": "Url" } - ] + ], + "entityType": "URL" } ] } @@ -2711,7 +2231,7 @@ "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "ApacheRequestToSensitiveFiles_AnalyticalRules Analytics Rule with template version 3.0.0", + "description": "ApacheRequestToSensitiveFiles_AnalyticalRules Analytics Rule with template version 3.0.1", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('analyticRuleObject10').analyticRuleVersion10]", @@ -2738,12 +2258,6 @@ "triggerThreshold": 0, "status": "Available", "requiredDataConnectors": [ - { - "connectorId": "ApacheHTTPServer", - "dataTypes": [ - "ApacheHTTPServer" - ] - }, { "connectorId": "CustomLogsAma", "datatypes": [ @@ -2759,22 +2273,22 @@ ], "entityMappings": [ { - "entityType": "File", "fieldMappings": [ { - "identifier": "Name", - "columnName": "FileCustomEntity" + "columnName": "FileCustomEntity", + "identifier": "Name" } - ] + ], + "entityType": "File" }, { - "entityType": "URL", "fieldMappings": [ { - "identifier": "Url", - "columnName": "UrlCustomEntity" + "columnName": "UrlCustomEntity", + "identifier": "Url" } - ] + ], + "entityType": "URL" } ] } @@ -2826,12 +2340,12 @@ "apiVersion": "2023-04-01-preview", "location": "[parameters('workspace-location')]", "properties": { - "version": "3.0.0", + "version": "3.0.1", "kind": "Solution", "contentSchemaVersion": "3.0.0", "displayName": "ApacheHTTPServer", "publisherDisplayName": "Microsoft Sentinel, Microsoft Corporation", - "descriptionHtml": "

Note: Please refer to the following before installing the solution:

\n

• Review the solution Release Notes

\n

• There may be known issues pertaining to this Solution, please refer to them before installing.

\n

The Apache HTTP Server solution provides the capability to ingest Apache HTTP Server events into Microsoft Sentinel. Refer to Apache Logs documentation for more information.

\n

This solution is dependent on the Custom logs via AMA connector to collect the logs. The Custom logs solution will be installed as part of this solution installation.

\n

NOTE: Microsoft recommends installation of Custom logs via AMA Connector. Legacy connector uses the Log Analytics agent which is about to be deprecated by Aug 31, 2024. Using MMA and AMA on same machine can cause log duplication and extra ingestion cost more details.

\n

Data Connectors: 1, Parsers: 1, Workbooks: 1, Analytic Rules: 10, Hunting Queries: 10

\n

Learn more about Microsoft Sentinel | Learn more about Solutions

\n", + "descriptionHtml": "

Note: Please refer to the following before installing the solution:

\n

• Review the solution Release Notes

\n

• There may be known issues pertaining to this Solution, please refer to them before installing.

\n

The Apache HTTP Server solution provides the capability to ingest Apache HTTP Server events into Microsoft Sentinel. Refer to Apache Logs documentation for more information.

\n

This solution is dependent on the Custom logs via AMA connector to collect the logs. The Custom logs solution will be installed as part of this solution installation.

\n

NOTE: Microsoft recommends installation of Custom logs via AMA Connector. Legacy connector uses the Log Analytics agent which were deprecated on Aug 31, 2024. Using MMA and AMA on same machine can cause log duplication and extra ingestion cost more details.

\n

Parsers: 1, Workbooks: 1, Analytic Rules: 10, Hunting Queries: 10

\n

Learn more about Microsoft Sentinel | Learn more about Solutions

\n", "contentKind": "Solution", "contentProductId": "[variables('_solutioncontentProductId')]", "id": "[variables('_solutioncontentProductId')]", @@ -2915,11 +2429,6 @@ "contentId": "[variables('huntingQueryObject10')._huntingQuerycontentId10]", "version": "[variables('huntingQueryObject10').huntingQueryVersion10]" }, - { - "kind": "DataConnector", - "contentId": "[variables('_dataConnectorContentId1')]", - "version": "[variables('dataConnectorVersion1')]" - }, { "kind": "AnalyticsRule", "contentId": "[variables('analyticRuleObject1')._analyticRulecontentId1]", diff --git a/Solutions/ApacheHTTPServer/ReleaseNotes.md b/Solutions/ApacheHTTPServer/ReleaseNotes.md index 3bd2a649d01..cdee341b617 100644 --- a/Solutions/ApacheHTTPServer/ReleaseNotes.md +++ b/Solutions/ApacheHTTPServer/ReleaseNotes.md @@ -1,3 +1,4 @@ | **Version** | **Date Modified (DD-MM-YYYY)** | **Change History** | |-------------|--------------------------------|--------------------------------------------------------------------| -| 3.0.0 | 13-08-2024 | Deprecating data connectors | \ No newline at end of file +| 3.0.1 | 05-12-2024 | Removed Deprecated **Data connectors** | +| 3.0.0 | 13-08-2024 | Deprecating data connectors | \ No newline at end of file From d576e38f68d14c7b1eb41d80e126fa243ed28c99 Mon Sep 17 00:00:00 2001 From: v-sabiraj Date: Fri, 6 Dec 2024 21:44:14 +0530 Subject: [PATCH 3/3] Update BoxConn.zip --- Solutions/Box/Data Connectors/BoxConn.zip | Bin 10258485 -> 10227225 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Solutions/Box/Data Connectors/BoxConn.zip b/Solutions/Box/Data Connectors/BoxConn.zip index 027a161ae953bdf2fecdf1638321d81860294a56..49b72173cc4ffeabfa2e99a4810fe1049884f178 100644 GIT binary patch delta 128847 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

;c$=Oq>sIMW5G*VZYhF2 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Ξ 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 U%xtOkQtL@eEzG{3K;Xas0iC%BAOHXW delta 157614 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