├── INSTALL.md
├── LICENSE
├── NOTICE
├── README.md
├── customfilters.json
├── fieldaliases.example.json
├── fieldaliases.json
├── img
├── icon128.png
├── icon16.png
├── icon32bw.png
├── icon32bw.uri
└── icon48.png
├── libs
├── d3.js
│ ├── LICENSE
│ └── d3.v4.min.js
├── ipaddr.js
│ ├── LICENSE
│ └── ipaddr.min.js
├── jquery-ui-1.12.1
│ ├── AUTHORS.txt
│ ├── LICENSE.txt
│ ├── external
│ │ └── jquery
│ │ │ └── jquery.js
│ ├── images
│ │ ├── ui-icons_444444_256x240.png
│ │ ├── ui-icons_555555_256x240.png
│ │ ├── ui-icons_777620_256x240.png
│ │ ├── ui-icons_777777_256x240.png
│ │ ├── ui-icons_cc0000_256x240.png
│ │ └── ui-icons_ffffff_256x240.png
│ ├── index.html
│ ├── jquery-ui.css
│ ├── jquery-ui.js
│ ├── jquery-ui.min.css
│ ├── jquery-ui.min.js
│ ├── jquery-ui.min.monkey.css
│ ├── jquery-ui.structure.css
│ ├── jquery-ui.structure.min.css
│ ├── jquery-ui.theme.css
│ ├── jquery-ui.theme.min.css
│ └── package.json
├── jquery-ui-timepicker
│ ├── LICENSE_MIT
│ ├── jquery-ui-timepicker-addon.css
│ └── jquery-ui-timepicker-addon.js
├── jquery
│ ├── LICENCE.txt
│ └── jquery-3.5.1.min.js
├── moment.js
│ ├── LICENCE
│ └── moment-with-locales.js
├── textarea-helper.js
│ └── textarea-helper.js
└── underscore.js
│ ├── LICENSE
│ └── underscore-min.js
├── manifest.json
├── options.css
├── options.html
├── options.js
├── popup.css
├── popup.html
├── popup.js
├── processTree.popup.js
├── script.js
├── siemMonkey.css
├── update.popup.js
└── xhr_override.js
/INSTALL.md:
--------------------------------------------------------------------------------
1 | Сохраните папку с файлами приложения или расширения на своем устройстве.
2 | Откройте страницу chrome://extensions.
3 | В правом верхнем углу включите режим разработчика.
4 | Нажмите Загрузить распакованное расширение.
5 | Найдите и выберите папку расширения.
6 |
7 | **Важно:** Для работы функции по проверке хеша файла на VirusTotal на вкладке "Процессы" плагина необходимо ввести
8 | API-ключ доступа в параметрах расширения (см. https://support.virustotal.com/hc/en-us/articles/115002100149-API).
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
--------------------------------------------------------------------------------
/NOTICE:
--------------------------------------------------------------------------------
1 | This repository incorporates materials as listed below or described in the code.
2 |
3 | All files located in the libs directory are externally maintained libraries
4 | used by this software, which have their own licenses. The license files are
5 | located in the corresponding folders, the paths are listed below.
6 |
7 | ---
8 |
9 | D3.js
10 | Copyright 2010-2018 Mike Bostock
11 |
12 | This product includes software developed for D3.js (https://d3js.org/)
13 | License: libs\d3.js\LICENSE
14 |
15 | ---
16 |
17 | jQuery
18 | Copyright OpenJS Foundation and other contributors, https://openjsf.org/
19 |
20 | This product includes software developed for jQuery (https://jquery.com/)
21 | License: libs\jquery\LICENCE.txt
22 |
23 | ---
24 |
25 | jQuery UI
26 | Copyright jQuery Foundation and other contributors, https://jquery.org/
27 |
28 | This product includes software developed for jQuery UI (https://jqueryui.com/)
29 | License: libs\jquery-ui-1.12.1\LICENSE.txt
30 |
31 | ---
32 |
33 | jQuery UI Time Picker
34 | Copyright 2013 Trent Richardson
35 |
36 | This product includes software developed for jQuery UI Time Picker (https://github.com/trentrichardson/jQuery-Timepicker-Addon)
37 | License: libs\jquery-ui-timepicker\LICENSE_MIT
38 |
39 |
40 | ---
41 |
42 | Moment.js
43 | Copyright JS Foundation and other contributors
44 |
45 | This product includes software developed for Moment.js (https://momentjs.com/)
46 | License: libs\moment.js\LICENCE
47 |
48 | ---
49 |
50 | Underscore.js
51 | Copyright 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
52 |
53 | This product includes software developed for Underscore.js (https://underscorejs.org/)
54 | License: libs\underscore.js\LICENSE
55 |
56 | ---
57 |
58 | textarea-helper.js
59 |
60 | This product includes software developed for textarea-helper (https://github.com/Codecademy/textarea-helper)
61 | License: MIT
62 |
63 | ---
64 |
65 | FlatIcon
66 | Copyright Freepik Company, https://www.freepikcompany.com/
67 |
68 | This product includes pictures distributed via the flaticon.com website (https://www.flaticon.com/free-icon/monkey_1459529)
69 | Licensed under Freepik Company Terms of Use (https://www.freepikcompany.com/legal)
70 |
71 |
72 | 8. License Agreement for Freepik Content
73 | The Company authorizes the User to download and use the Freepik Content under the terms of this Section (see Section 7 in relation to Sponsored Content). The Company and its licensors reserve all rights over the Freepik Content not expressly granted in this license to the User.
74 |
75 | Subject to the fulfillment of these Terms, the Company authorizes the User in a non-transferable, revocable, limited, non-exclusive manner and on a worldwide basis for the duration of the relevant rights; to download, use and modify the Freepik Content, in a device the User owns or controls and only for the purposes and uses allowed in these Terms.
76 |
77 | The User may use the Freepik Content (including any derivative work), either using the Freepik Contents in its entirety or using only some or some of its elements, either using the Freepik Contents without modification, combining them with other contents or having previously modified them, being the license granted with respect to the Freepik content, provided that it:
78 |
79 | Does not involve collective use;
80 | The Freepik Content is not used in a manner that suggests an association or endorsement of any kind by the Company or the Website;
81 | The Freepik Content or any derivative work is not used or included (in whole or in part) in a database, archive or in any other media/stock product, collection, set of clips, or library, for distribution or resale or used in any other way that could prevent or limit future visits or downloads from the Website;
82 | Does not resell, assign, transfer or sublicense the Freepik Content or any derived work from the Freepik Content;
83 | Does not use the Freepik Content in printed or electronic items (e.g. t-shirts, cups, postcards, birthday or greeting cards, invitations, calendars, web models or electronic devices, apps, NFTs, videogames, advertising spots, audiovisual animations) aimed to be resold, in which the content in the Freepik Content is the main element (because of size, relevance or any other cause, in case of doubt about whether the content is main element, it shall be deemed that the content is main element);
84 | Does not use the Freepik Content (totally or partially) in any trademark, or part of the same, which may be used by any other means to guarantee or to imply a guaranty of any product and/or service, unless the Freepik Content used in such cases is modified in such a way as to be a new and different content not confusingly similar with the original Freepik Content or implies a use of the Freepik Content as a template or test, and not as a final item or material;
85 | Does not use the Freepik Content (including any caption information, title, keywords or other metadata associated with the Freepik Content) for any machine learning and/or artificial intelligence purposes, or for any technologies designed or intended for the identification of natural persons.
86 | Does not make any use of the Freepik Content which might be considered defamatory, libellous, obscene, immoral or illegal, including, without limitation, using it in a way that places any person appearing in the Freepik Content in a negative light or depicts them in a way that they may find offensive such as the use in pornography, advertisements for escort or similar services, political endorsements, birth control products, and;
87 | Does not make any use of the Freepik Content to slander, libel or to vilify a person, race, sex, culture, sexual orientation, religion, country, region, town, village or any other place, or any other human group.
88 | When any Freepik Content is marked or identified as for editorial use, or when within the same there are logos, recognizable products, public buildings, public events or images taken in places where recognizable persons appear in the background, the User shall only be entitled to use it for such editorial use. In such cases, the User undertakes not to use that content in any manner that entails any connection with any business activity, the use in economic traffic or advertising, marketing or commercialization of any product or service. The User shall be directly liable and the Company shall not assume any liability as a result of the use for commercial purposes by the User of any content belonging to the Freepik Content, which according to this paragraph should be for editorial use only.
89 |
90 | The authorization to use the Freepik Content shall be free provided that any use of the content in the Freepik Content by the User is credited to the Company/Website as stated by the Company from time to time. In order to benefit from the Service or to use the Freepik Content without acknowledging the Company/Website, the User must purchase a premium subscription (hereinafter, the "Premium Subscription") in the Website and download the Freepik Content during the term of any such Premium Subscription. Conditions in Section 10 shall apply to the purchase of the Premium Subscription.
91 |
92 | As a general rule, it is forbidden for a User to authorize any third parties to use the Freepik Content (or any modification of any content in the Freepik Content). As an exception to the prohibition, the User may allow third parties to use the Freepik Content, when each and every of the following conditions are met:
93 |
94 | The third party has professionally instructed the User to produce goods or provide services to it/him/her and the User uses a limited number of items within the Freepik Content to produce such goods or provide such services to the instructing third party;
95 | The authorization granted by the User to the third party is in writing and complies with every restriction of the User’s authorization to use the relevant Freepik Content and includes, without limitation, a restriction for the third party to distribute, resell or license the relevant content in the Freepik Content (i.e. the third party is the final user of the relevant content in the Freepik Content);
96 | None of the contents in the Freepik Content which are subject to the authorization are used as the main element (because of size, relevance or any other cause; in case of doubt about whether the content is the main element, it shall be deemed as the main element) in printed or electronic items (e.g. t-shirts, cups, postcards, birthday or greeting cards, invitations, calendars, web models or electronic devices, apps, NFTs, videogames, advertising spots, audiovisual animations) aimed to be resold by the third party;
97 | The production of goods or provision of services by the User to the third party is not done by automatic means, it is tailor-made for the third party (and therefore its use is not authorized by the User to any other third party) and requires a specific substantial human intervention from the User in relation to each third party; and
98 | The User -and not the third party- chooses the specific items within the content of the Freepik Content to be used in the production of goods or provision of services for the third party.
99 | When all of the above conditions are met, the User shall be entitled to authorize a third party to use the relevant content in the Freepik Content. This exception refers only to the prohibition for the User to authorize third parties to use the content in the Freepik Content without affecting or limiting in any way the remaining conditions of the User’s right to use the Freepik Content. Whether the above conditions regarding the exception to the prohibition for Users to authorize third parties to use the content in the Freepik Content are met shall be interpreted restrictively so that, in case of doubt, it shall be deemed that the conditions are not met.
100 |
101 | The User does not acquire any right as a result of the use of the content in the Freepik Content. In particular, the User is not authorized to distribute, resell or rent any content in the Freepik Content (or any modification of any content in the Freepik Content).
102 |
103 | The User’s rights under this Section will end automatically without any notice if the User breaches any of the Terms. In case of termination of the rights hereunder, the User shall cease using content in the Freepik Content and will destroy every copy, whether total or partial, thereof.
104 |
105 | ---
106 |
107 | Pure CSS Loaders
108 | Copyright Loading.io, https://loading.io/
109 |
110 | This product includes CSS loading icon provided in the page https://loading.io/css/
111 |
112 | Licensed under CC0 License (https://creativecommons.org/publicdomain/zero/1.0/)
113 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SiemMonkey - плагин к браузеру Google Chrome для упрощения некоторых действий в MP SIEM
2 |
3 | [](https://github.com/Security-Experts-Community/.github/blob/main/CODE_OF_CONDUCT.md)
4 |
5 | ## Установка
6 | Описание процесса установки описано в файле [INSTALL.md](INSTALL.md)
7 |
8 | ## Репозитории проекта
9 | Основной:
10 | - GitHub: https://github.com/Security-Experts-Community/siem-monkey
11 |
12 | Зеркала:
13 | - Codeberg: https://codeberg.org/Security-Experts-Community/siem-monkey
14 | - GitFlic: https://gitflic.ru/project/security-experts-community/siem-monkey
15 |
16 | # Основные функции
17 | - [Popup](#popup):
18 | * получение дополнительной информации из событий MP SIEM и/других систем на основе полей события в правой панели
19 | * быстрый переход к определенным событиям или другим системам (PT NAD, PT Sandbox) в отдельной вкладке
20 | - [UI SIEM](#ui-siem):
21 | * выполнение некоторых действий по клику на определенные поля события в правой панели
22 | * возможность расширения правой панели с информацией о событии на достаточную ширину
23 |
24 | **Поддерживаемые версии:**
25 | - MP SIEM R25, R25.1, R26, R26.1
26 | - PT NAD 11
27 |
28 | # Подробное описание
29 | # Popup
30 | При открытии всплывающего окна плагина происходит чтение значений всех полей события, отображающегося в правой панели
31 | (текущее событие).
32 | Пользователю предлагается ряд действий по поиску информации в MP SIEM или переходу к внешним системам на основе
33 | значений некоторых полей текущего события.
34 | **ВАЖНО:** Значения из "свернутых" групп полей не получаются и их использование в действиях невозможно.
35 | ## Процессы
36 |
37 |
38 | На вкладке "Процессы" доступны функции, позволяющие отобразить информацию о событиях запуска процессов
39 | в виде иерархического дерева.
40 | Ограничение количества запрашиваемых событий о запусках процессов задается в поле "Максимальное число событий".
41 | По умолчанию при построении дерева всех процессов текущей сессии будет запрашивать не более 1000 событий.
42 | Ограничение времени, за которое осуществляется поиск событий при построении дерева процессов задается в полях "С" и "По".
43 | По умолчанию эти поля заполняются временем, отстоящим на одни сутки в меньшую и в большую сторону от времени текущего события,
44 | информации о котором отображается в правой панели интерфейса MP SIEM.
45 | ### Найти в SIEM и проверить на VT хеш файла
46 | Производится поиск события запуска процесса sysmon 1 или инвентаризации файла антивирусом Касперского для имени файла,
47 | содержащегося в поле `object.name` и `object.process.name` (если они различны). Из найденного события извлекается хеш
48 | файла и проверяется на VirusTotal. Результаты проверки выводятся в окно плагина в виде отношения числа "плохих" вердиктов
49 | к общему числу, а так же список известных имен файла. При клике на количество вердиктов происходи открытие VirusTotal
50 | с информацией о файле в новой вкладке браузера.
51 | ### Проверить на VirusTotal по хешу
52 | Из текущего события извлекается хеш файла и проверяется на VirusTotal. Результаты проверки выводятся в окно плагина
53 | в виде отношения числа "плохих" вердиктов к общему числу, а также список известных имен файла.
54 | При клике на количество вердиктов происходи открытие VirusTotal с информацией о файле в новой вкладке браузера.
55 | ### Показать сессии и число процессов в них на узле
56 | Из текущего события запуска процесса (4688 или sysmon 1) извлекается имя хоста (`event_src.host`). Для этого хоста запрашивается информация
57 | о числе запущенных процессов в каждой сессии и учетной записи, от имени которой выполнялись процессы в данной сессии.
58 | Полученная информация выводится в окно плагина. При этом темно-красным цветом помечаются сессии, запущенные от имени
59 | встроенных учетных записей (SYSTEM, LOCAL SERVICE, NETWORK SERVICE и др. у которых номер сессии меньше 1000).
60 | Серым цветом помечаются сессии, запущенные от имени учетных записей с именами, начинающимися на `dwm-` и `umfd-`.
61 | Для получения информации о процессах определенной сессии в виде дерева необходимо кликнуть на соответствующую строку
62 | в списке сессий.
63 | ### Найти процессы в сессии на узле
64 | Из текущего события запуска процесса (4688 или sysmon 1) извлекается имя хоста (`event_src.host`) и номер сессии
65 | (`object.account.session_id`). Далее из MP SIEM запрашивается информация обо всех событиях запуска процессов в указанной сессии
66 | (с учетом ограничений по количеству и времени выборки). Полученные сведения отображаются в окне плагина в виде дерева.
67 | В каждом узле дерева выводится информация о времени запуска процесса (в UTC), PID процесса и параметры командной строки.
68 | При клике на определенную строку с информацией о процессе происходит открытие новой вкладки MP SIEM, в которой отображаются
69 | все события, связанные с выбранным процессом на основе значения guid процесса (только для дерева, построенного на основе событий sysmon 1).
70 | ### Родители процесса
71 | Из текущего события запуска процесса (4688 или sysmon 1) извлекается идентификатор события (`uuid`).
72 | Далее из MP SIEM последовательными запросами получается информация о событиях запуска родительских процессов.
73 | Полученные сведения отображаются в окне плагина в виде дерева.
74 | В каждом узле дерева выводится информация о времени запуска процесса (в UTC), PID процесса и параметры командной строки.
75 | При клике на определенную строку с информацией о процессе происходит открытие новой вкладки MP SIEM, в которой отображаются
76 | все события, связанные с выбранным процессом на основе значения guid процесса (только для дерева, построенного на основе событий sysmon 1).
77 |
78 | ### Все потомки процесса
79 | Из текущего события запуска процесса (4688 или sysmon 1) извлекается идентификатор события (`uuid`).
80 | Далее из MP SIEM последовательными запросами получается информация о событиях запуска всех потомков процессов текущего процесса.
81 | Полученные сведения отображаются в окне плагина в виде дерева.
82 | В каждом узле дерева выводится информация о времени запуска процесса (в UTC), PID процесса и параметры командной строки.
83 | При клике на определенную строку с информацией о процессе происходит открытие новой вкладки MP SIEM, в которой отображаются
84 | все события, связанные с выбранным процессом на основе значения guid процесса (только для дерева, построенного на основе событий sysmon 1).
85 |
86 | ## Полезные фильтры
87 |
88 |
89 | На вкладке "Полезные фильтры" доступны фильтры, позволяющие открыть в новой вкладке окно MP SIEM по запросу, построенному на
90 | основе значений полей текущего события.
91 | Шаблоны названий и сами фильтры описываются в файле customfilters.json и могут быть самостоятельно дополнены пользователем плагина.
92 | Пример:
93 | `"description":"Все события запуска процессов для учетной записи ${subject.account.name}", "filter":"msgid in [1,4688] and subject.account.name = '${subject.account.name}'"}`
94 |
95 | Поле `description` содержит описание фильтра, выводимое в окне плагина.
96 | Поле `filter` содержит фильтр для MP SIEM на языке PDQL.
97 | Конструкция `${subject.account.name}` позволяет подставить в описание и фильтр значение указанного поля текущего события.
98 |
99 | **ВАЖНО:** В окно плагина при его открытии выводятся только те фильтры, где удалось произвести подстановку всех шаблонов
100 | (не выводятся фильтры, где подразумевалась подстановка полей исходного события, содержащих значение null).
101 |
102 | ## Внешние запросы
103 | В случае, если MP SIEM интегрирован с PT NAD и/или PT Sandbox оператору на вкладке "Внешние запросы"
104 | предлагаются удобные способы переходить от текущего события в MP SIEM к изучению связанных с ним подробностей в этих продуктах.
105 | Доступны следующие возможности:
106 | - открыть в новой вкладке окно PT Sandbox с информацией о задаче обработке файла (для текущего события, полученного из PT Sandbox).
107 | Идентификатор задачи извлекается из поля `chain_id` текущего события.
108 | - открыть в новой вкладке окно PT NAD с информацией о трафике по фильтру на основе IP-адресов и номеров портов источника и получателя
109 | (строится на основе значений полей `src.ip`, `src.port`, `dst.ip` и `dst.port` текущего события)
110 |
111 | # UI SIEM
112 | При загрузке страницы MP SIEM в код страницы внедряется код плагина, добавляющий ряд дополнительных функций
113 |
114 | ## Обработчики кликов
115 | Поля события в правой панели, для которых доступны обработчики клика выделяются красным или зеленым цветом.
116 | - `object.hash`, `object.process.hash`, `subject.process.hash` - переход на VirusTotal для просмотра вердиктов по хешу в новой вкладке
117 | В параметрах плагина можно добавить дополнительные сервисы для проверки хешей, указав название, которое должно выводиться в UI,
118 | а также шаблон ссылки, по которой доступна проверка конкретного хеша (в качестве шаблона подстановки следует использовать `${hash}`.
119 | Проверка при помощи VirusTotal доступна всегда, независимо от дополнительных добавленных сервисов.
120 |
121 |
122 |
123 |
124 | - `external_link` - переход по ссылке, содержащейся в значении поля, в новой вкладке
125 | - `id` - переход к PTKB для поиска правила нормализации, соответствующего текущему событию, в новой вкладке
126 | - `task_id` - переход к соответствующей задаче сбора событий SIEM в новой вкладке
127 | - `src.ip`, `dst.ip` - открытие дополнительно меню со ссылками, позволяющими открыть в новой вкладке внешние системы с информацией по
128 | адресу, содержащемуся в названии поля. Список сервисов и шаблоны ссылкок, по которым доступна проверка конкретного адреса необходимо предварительно задать в параметрах расширения (в качестве шаблона для подстановки IP-адреса следует использовать `${ip}`). Для локальных адресов выводятся только сервисы, явно отмеченные специальным чекбоксом в настройках. Для адресов, проверка которых во внешних сервисах бессмысленна (см. https://en.wikipedia.org/wiki/Reserved_IP_addresses), ссылки не выводятся.
129 |
130 |
131 |
132 |
133 |
134 | ## Автодополнение названий полей события и операторов PDQL при вводе фильтра событий
135 | При наборе текста в окне ввода фильтра событий появляется меню, предлагающее подходящие названия полей событий или операторов языка PDQL (по совпадению текущего слова с подстрокой в названии поля или оператора).
136 | Для выбора определенного значения можно воспользоваться мышкой или кпопками ВНИЗ/ВВЕРХ клавиатуры. Клавиша TAB или ENTER позволяет вставить выбранное значение в окно ввода фильтра.
137 |
138 |
139 | ## Построение дерева процессов
140 | Для событий запуска процессов в правой панели справа от значения поля `object` отображается три пиктограммы 🦍
141 | 🦧
142 | 🐒
143 | Клик по ним позволяет получить во всплывающем окне дерево всех процессов текущей сессии, дерево всех предков, дерево
144 | всех потомков, аналогично тому, как это происходит при построении деревьев в окне плагина.
145 |
146 | Построение дерева процессов возможно так же для любых событий (в том числе, корреляционных), если у них заполнено поле object.process.guid или subject.process.guid.
147 | В этом случае плагин сначала самостоятельно находит событие запуска процеса, после чего строит на его основе дерево аналогичным образом, как для событий запуска процессов.
148 |
149 |
150 |
151 | ## Сохранение нормализованного события в виде JSON
152 |
153 |
154 | В заголовке правой панели добавлены кнопки, позволяющие сохранить нормализованное событие в виде JSON (без незаполненных полей):
155 | - 📋 - сохраняет текущее событие в виде JSON в буфер обмена
156 | - 💾 - сохраняет текущее событие в текстовый файл в виде JSON, в качестве имени используется uuid события
157 | - 🖫 - сохраняет в текстовый файл в виде JSON массив исходных событий для текущего корреляционного события, в качестве имени используется uuid текущего события с суффиксом 'subevents'
158 |
159 | Появление этих кнопок можно отключить в параметрах плагина.
160 |
161 |
162 |
163 | ## Получение ссылки на текущее событие
164 |
165 |
166 | В заголовке правой панели добавлена кнопка, позволяющая сохранить в буфер обмена ссылку на текущее событие.
167 |
168 | ## Отключение нового способа сортировки для запросов событий с группировками и агрегациями
169 |
170 |
171 |
172 | В версии R25.1 появился дополнитеьный параметр в запросах с группировками и агрегациами, позволяющий отсортировать результат по одному из столбцов, используемых в групировке.
173 | Такое поведение не всегда нужно, и иногда необходимо дать пользователю возможность выполнять такие запросы по старому.
174 | В расширение добавлен параметр ```Отключить новое поведение сортировки при аггрегации (R25.1 и выше)```, при использовании которого происходит модернизация запросов к бекенду, убирающая параметр ```groupByOrder```, влияющий на сортровку.
175 | Изменения поведения вступают в силу после полной перезагрузки страницы.
176 |
177 |
178 | ## Пользовательские названия для полей при их отображении в панели событий
179 |
180 |
181 | Можно настроить отображение собственных имен полей событий. Пример файла конфигурации приведен в файле fieldaliases.example.json.
182 | Требуемое сопоставление необходимо указать в файле fieldaliases.json. Поддерживается настройка маппинга названий полей как для всех событий (секция default),
183 | так и индивидуально по значению поля id или correlation_name события.
184 |
185 | Пример конфигурационного файла fieldaliases.json
186 | ```
187 | {
188 | "LSASS_memory_access_SubRule": {
189 | "datafield9": "стек вызовов"
190 | },
191 | "LSASS_Memory_Dump": {
192 | "datafield9": "стек вызовов"
193 | },
194 | "Suspicious_Connection_System_Process": {
195 | "datafield19": "продвинутая цепочка"
196 | },
197 | "PT_UNIX_like_auditd_syslog_structured_syscall_process_start": {
198 | "datafield3": "Binary File Access Mode"
199 | },
200 | "default": {
201 | "subject.process.cmdline": "командная строка процесса",
202 | "subject.process.parent.cmdline": "командная строка родителя"
203 | }
204 | }
205 | ```
206 |
207 |
208 | ## Описание правила корреляции и ссылка на него в базе знаний
209 |
210 |
211 | У корреляционных событий справа от названия правила корреляции отображается иконка, при нажатии на которую открывается правило корреляции в PTKB, и описание правила корреляции.
212 | Аналогичная информация отображается при просмотре инцидентов.
213 | Отображение описания правила и ссылки на PTKB можно отключить в параметрах расширения.
214 |
215 |
216 |
217 | # Bonus \#1
218 | Плагин так же позволяет переходить из карточки сессии или карточки атаки в интерфейсе PT NAD к окну MP SIEM в новой вкладке
219 | для поиска по фильтру событий на основе адресов и номеров портов отправителя и получателя.
220 | Для этого нужно находясь в окне просмотра карточки сессии или атаки PT NAD открыть окно плагина и на вкладке "полезные фильтры"
221 | выбрать один из подходящих пунктов:
222 | - События подключения к 4.8.15.16:2342 в SIEM (для поиска из NAD)
223 | - События подключения 4.8.15.16:2342 ⇄ 3.14.15.92:6535 в SIEM (для поиска из NAD)
224 | Первый пункт может помочь найти в MP SIEM все события подключения к указанному серверу по определенному порту.
225 | Второй фильтр удобен для поиска информации о конкретной сессии.
226 | При переходе к MP SIEM диапазон времени задается на основе времени начала сессии ±15 минут.
227 |
228 |
229 |
230 | # Bonus \#2
231 | Убрано ограничение на максимальную ширину правой панели (панели события).
232 |
233 | Иконка
234 | [Monkey icons created by Darius Dan - Flaticon](https://www.flaticon.com/free-icons/monkey)
235 | Анимация загрузки
236 | [loading.io css spinner]( https://loading.io/css/ )
237 |
--------------------------------------------------------------------------------
/customfilters.json:
--------------------------------------------------------------------------------
1 | [
2 | {"description":"События subject.name = '${subject.name}'","filter":"subject.name = '${subject.name}'"},
3 | {"description":"События subject.name = '${subject.name}' or object.name = '${subject.name}'","filter":"subject.name = '${subject.name}' or object.name = '${subject.name}'"},
4 | {"description":"События subject.account.name = '${subject.account.name}'","filter":"subject.account.name = '${subject.account.name}'"},
5 | {"description":"События subject.account.name = '${subject.account.name}' or object.account.name = '${subject.account.name}'","filter":"subject.account.name = '${subject.account.name}' or object.account.name = '${subject.account.name}'"},
6 | {"description":"Сетевые соединения для ${src.ip}","filter":"object in ['flow', 'connection'] and protocol in ['TCP', 'tcp', '6'] and src.ip = '${src.ip}' or dst.ip = '${src.ip}'"},
7 | {"description":"Сетевые соединения для ${dst.ip}","filter":"object in ['flow', 'connection'] and protocol in ['TCP', 'tcp', '6'] and src.ip = '${dst.ip}' or dst.ip = '${dst.ip}'"},
8 | {"description":"События x.x.x.x:${src.port} ⇄ ${dst.ip}:${dst.port}","filter":"src.port = '${src.port}' and dst.ip = '${dst.ip}' and dst.port=${dst.port}"},
9 | {"description":"Все события процесса ${subject.process.guid} (sysmon, на основе subject.process.guid)","filter":"event_src.host = '${event_src.host}' and (subject.process.guid = '${subject.process.guid}' or object.process.guid = '${subject.process.guid}')"},
10 | {"description":"Все события процесса ${object.process.guid} (sysmon, на основе object.process.guid)","filter":"event_src.host = '${event_src.host}' and (subject.process.guid = '${object.process.guid}' or object.process.guid = '${object.process.guid}')"},
11 | {"description":"Все важные корреляции на хосте ${event_src.host}", "filter":"((correlation_name and !(correlation_name contains 'subrule') and detect != 'false')) and (event_src.host = '${event_src.host}')"},
12 | {"description":"Найти события, связанные с файлом ${object.name} на хосте ${event_src.host}, где есть хеш", "filter":"(event_src.host = '${event_src.host}') and (object.name = '${object.name}') AND (object.hash)"},
13 | {"description":"Сетевые коннекты файла ${object.process.fullpath}", "filter":"event_src.host = '${event_src.host}' and msgid = 3 AND (object.process.fullpath = '${object.process.fullpath}')"},
14 | {"description":"События логина и открытия сессий для УЗ ${subject.name}", "filter":"subject.name = '${subject.name}' AND (action = 'login' or msgid in [1149,4778])"},
15 | {"description":"Информация о сессиях RDP для пользователя ${subject.account.name}", "filter":"subject.account.name = '${subject.account.name}' and msgid in [4778,4779]"},
16 | {"description":"Информация о сессиях RDP для хоста ${event_src.host}", "filter":"event_src.host = '${event_src.host}' and msgid in [4778,4779]"},
17 | {"description":"Информация о сессиях RDP с адреса ${src.ip}", "filter":"src.ip = '${src.ip}' and msgid in [4778,4779]"},
18 | {"description":"Все события запуска процессов для учетной записи ${subject.account.name}", "filter":"msgid in [1,4688] and subject.account.name = '${subject.account.name}'"},
19 | {"description":"Найти все события для запуска файла с хешем ${object.hash}","filter": "msgid=1 and object.process.hash = '${object.process.hash}'"},
20 | {"description":"События подключения к ${nad_dst_ip}:${nad_dst_port} в SIEM (для поиска из NAD)", "filter":"dst.ip = ${nad_dst_ip} and dst.port = ${nad_dst_port}", "requesturl":""},
21 | {"description":"События подключения ${nad_src_ip}:${nad_src_port} ⇄ ${nad_dst_ip}:${nad_dst_port} в SIEM (для поиска из NAD)", "filter":"src.ip = ${nad_src_ip} and src.port = ${nad_src_port} and dst.ip = ${nad_dst_ip} and dst.port = ${nad_dst_port}", "requesturl":""}
22 | ]
23 |
--------------------------------------------------------------------------------
/fieldaliases.example.json:
--------------------------------------------------------------------------------
1 | {
2 | "LSASS_memory_access_SubRule": {
3 | "datafield9": "стек вызовов"
4 | },
5 | "LSASS_Memory_Dump": {
6 | "datafield9": "стек вызовов"
7 | },
8 | "Suspicious_Connection_System_Process": {
9 | "datafield19": "продвинутая цепочка"
10 | },
11 | "PT_UNIX_like_auditd_syslog_structured_syscall_process_start": {
12 | "datafield3": "Binary File Access Mode"
13 | },
14 | "default": {
15 | "subject.process.cmdline": "командная строка процесса",
16 | "subject.process.parent.cmdline": "командная строка родителя"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/fieldaliases.json:
--------------------------------------------------------------------------------
1 | {
2 |
3 | }
4 |
5 |
6 |
--------------------------------------------------------------------------------
/img/icon128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Security-Experts-Community/siem-monkey/2bf7844a8be1eb540f8c49e318134ffdc46b8ac3/img/icon128.png
--------------------------------------------------------------------------------
/img/icon16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Security-Experts-Community/siem-monkey/2bf7844a8be1eb540f8c49e318134ffdc46b8ac3/img/icon16.png
--------------------------------------------------------------------------------
/img/icon32bw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Security-Experts-Community/siem-monkey/2bf7844a8be1eb540f8c49e318134ffdc46b8ac3/img/icon32bw.png
--------------------------------------------------------------------------------
/img/icon32bw.uri:
--------------------------------------------------------------------------------
1 | data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAABGdBTUEAALGPC/xhBQAAAAJiS0dEAP+Hj8y/AAAACXBIWXMAAA1nAAANZwG8Jya1AAAAB3RJTUUH5wEdDiU4kuliGwAABGBJREFUSMeNlV1sU2UYx3/v+Wg7t9LRtZRNZARGhM0hH3KB6ASFRASJiTFkRhMSLvRGjCYaEy8kJt7oBYkXRDAxITEsokFEoxdC7LZA5oRByBhjK8SxZXRfrK1td9qevq8X55R2DD+ek5z34n3+/+fzfR7BPGl3T0HOq2qUiQCUKIi0N6fcu455CHE/XCHN4nptp/cJX4PhcwhsyxrPXZS/6le0griPQsyHF1Et+jsNe1vCqwnhdfDkmGaYa1PjZ4qHxTV9HoWohCepfrH207Y1z7F0vmuAIs45ugYT72d+DFRQiPYKleKeyNF9DU+i8WCRXOCb8Yk39J/K9HorUBTFFcVNYmvg41dXPr3AdmW8y/H7b2ywknZYKpKa44EMcTDQXtsw6dluvPaP1stefM1v9pJ8YjzZwefatN4S1A+vfeuFYKM5o+0jwH+JIMR1bbu5Ljj3zN162am3HFx1cK8epp9FbPsX98vi5yZpWmkk3jyT1Hz7N5p+bCZp+l9wEDQxiY2fjaZvv1HVFAZsLMKuQpw/mCDABla5fRCjjxQRNlMPQBgLG4MwVU2GsqUBEokHgEFOUEWEMfrYRRvQxfdUUc0APbzOWsCDRAISZRuZy6Nb6lFuT2U4TSNbMJEM8gtB4AceYQ9JrjDCKd6mxvULRslc1gpHLqXu3CveKCk2kKeHGR5lCcf5Eo3n8XELjYeZZMzV1LjDpVThiKGfjK8488Fj1XkAchiYpBkgSIht5LjIGBNcJY1ABywA8vTRn4l/pp/UW4uiJ3l9xG8v22rWofidMEtZTRgND9UUue4GqJEiw0783OXc3NDZxEfaV+QNIK9/N3e+6me1HpayiU62sQybYaaQ5LCI0YiHDGO0Ue/Ef2PugPcOgOa8KmVhOzXexSJ6sblAJ3FmydIEXOUGQyxnd6lXbGUBdKA5D1NIVZQATJHgcVIM8RSCNawBniXADnaTYMp9D6oopIMspT9fSGUARZQwKzFYT4gp0qSZIsRmGmgmRBQFZCikcLKO4RwJy3MrDiS4yVY0/GxC8TLVwHJqCQKCZs6TYDFx8rcSVsQtJwARVegdlpJpioRQbs8H8eAh6MatCFFkGsmwLPRGFJUEQHds5DZZDExK81dV/EFhYpDlNrERukswzckliNjMqSgKhXTtaxWfKCUPRZSZUyJWmopGiclU9rGeXTXNkiw+Ckw4daWUqggmWSQxegbkMVOVb8rvfGj2UPRocfEodczRS/refFDUsAMPo0wTnZ09JIYqp4Mr7YDQ5Jt8sqL2FR4i74ZSitRDlm/5M8GH2hdKlse6XlLppxWUuCRGUutkXSNedIx7n0mBTgaGeU8cR1YuFr1sxaFQ/bJ7ojnTGKYKzU0mJIjS12Uf4KxQ81dbBYFDISBud8YXjTRlvBKbLBNcpfOvoROFd7XB+zcjC+eos6mkT7YZL/k2eusgN2P12ae1Ls1iAZwHDeLSsrM0bbEKgEjKWZ+b0Y4F2n8DLrW7Px/mhBwAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDEtMjlUMTQ6Mzc6NTErMDA6MDAjXia7AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTAxLTI5VDE0OjM3OjUxKzAwOjAwUgOeBwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAASUVORK5CYII=
--------------------------------------------------------------------------------
/img/icon48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Security-Experts-Community/siem-monkey/2bf7844a8be1eb540f8c49e318134ffdc46b8ac3/img/icon48.png
--------------------------------------------------------------------------------
/libs/d3.js/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright 2010-2017 Mike Bostock
2 | All rights reserved.
3 |
4 | Redistribution and use in source and binary forms, with or without modification,
5 | are permitted provided that the following conditions are met:
6 |
7 | * Redistributions of source code must retain the above copyright notice, this
8 | list of conditions and the following disclaimer.
9 |
10 | * Redistributions in binary form must reproduce the above copyright notice,
11 | this list of conditions and the following disclaimer in the documentation
12 | and/or other materials provided with the distribution.
13 |
14 | * Neither the name of the author nor the names of contributors may be used to
15 | endorse or promote products derived from this software without specific prior
16 | written permission.
17 |
18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------------------
/libs/ipaddr.js/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (C) 2011-2017 whitequark
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
--------------------------------------------------------------------------------
/libs/ipaddr.js/ipaddr.min.js:
--------------------------------------------------------------------------------
1 | !function(t){!function(t){"use strict";const r="(0?\\d+|0x[a-f0-9]+)",e={fourOctet:new RegExp(`^${r}\\.${r}\\.${r}\\.${r}$`,"i"),threeOctet:new RegExp(`^${r}\\.${r}\\.${r}$`,"i"),twoOctet:new RegExp(`^${r}\\.${r}$`,"i"),longValue:new RegExp(`^${r}$`,"i")},n=new RegExp("^0[0-7]+$","i"),i=new RegExp("^0x[a-f0-9]+$","i"),o="(?:[0-9a-f]+::?)+",s={zoneIndex:new RegExp("%[0-9a-z]{1,}","i"),native:new RegExp(`^(::)?(${o})?([0-9a-f]+)?(::)?(%[0-9a-z]{1,})?$`,"i"),deprecatedTransitional:new RegExp(`^(?:::)(${r}\\.${r}\\.${r}\\.${r}(%[0-9a-z]{1,})?)$`,"i"),transitional:new RegExp(`^((?:${o})|(?:::)(?:${o})?)${r}\\.${r}\\.${r}\\.${r}(%[0-9a-z]{1,})?$`,"i")};function a(t,r){if(t.indexOf("::")!==t.lastIndexOf("::"))return null;let e,n,i=0,o=-1,a=(t.match(s.zoneIndex)||[])[0];for(a&&(a=a.substring(1),t=t.replace(/%.+$/,""));(o=t.indexOf(":",o+1))>=0;)i++;if("::"===t.substr(0,2)&&i--,"::"===t.substr(-2,2)&&i--,i>r)return null;for(n=r-i,e=":";n--;)e+="0:";return":"===(t=t.replace("::",e))[0]&&(t=t.slice(1)),":"===t[t.length-1]&&(t=t.slice(0,-1)),{parts:r=function(){const r=t.split(":"),e=[];for(let t=0;t0;){if((i=e-n)<0&&(i=0),t[o]>>i!=r[o]>>i)return!1;n-=e,o+=1}return!0}function u(t){if(i.test(t))return parseInt(t,16);if("0"===t[0]&&!isNaN(parseInt(t[1],10))){if(n.test(t))return parseInt(t,8);throw new Error(`ipaddr: cannot parse ${t} as octal`)}return parseInt(t,10)}function d(t,r){for(;t.length=0;n-=1){if(!((i=this.octets[n])in e))return null;if(o=e[i],r&&0!==o)return null;8!==o&&(r=!0),t+=o}return 32-t},t.prototype.range=function(){return h.subnetMatch(this,this.SpecialRanges)},t.prototype.toByteArray=function(){return this.octets.slice(0)},t.prototype.toIPv4MappedAddress=function(){return h.IPv6.parse(`::ffff:${this.toString()}`)},t.prototype.toNormalizedString=function(){return this.toString()},t.prototype.toString=function(){return this.octets.join(".")},t}(),h.IPv4.broadcastAddressFromCIDR=function(t){try{const r=this.parseCIDR(t),e=r[0].toByteArray(),n=this.subnetMaskFromPrefixLength(r[1]).toByteArray(),i=[];let o=0;for(;o<4;)i.push(parseInt(e[o],10)|255^parseInt(n[o],10)),o++;return new this(i)}catch(t){throw new Error("ipaddr: the address does not have IPv4 CIDR format")}},h.IPv4.isIPv4=function(t){return null!==this.parser(t)},h.IPv4.isValid=function(t){try{return new this(this.parser(t)),!0}catch(t){return!1}},h.IPv4.isValidFourPartDecimal=function(t){return!(!h.IPv4.isValid(t)||!t.match(/^(0|[1-9]\d*)(\.(0|[1-9]\d*)){3}$/))},h.IPv4.networkAddressFromCIDR=function(t){let r,e,n,i,o;try{for(n=(r=this.parseCIDR(t))[0].toByteArray(),o=this.subnetMaskFromPrefixLength(r[1]).toByteArray(),i=[],e=0;e<4;)i.push(parseInt(n[e],10)&parseInt(o[e],10)),e++;return new this(i)}catch(t){throw new Error("ipaddr: the address does not have IPv4 CIDR format")}},h.IPv4.parse=function(t){const r=this.parser(t);if(null===r)throw new Error("ipaddr: string is not formatted like an IPv4 Address");return new this(r)},h.IPv4.parseCIDR=function(t){let r;if(r=t.match(/^(.+)\/(\d+)$/)){const t=parseInt(r[2]);if(t>=0&&t<=32){const e=[this.parse(r[1]),t];return Object.defineProperty(e,"toString",{value:function(){return this.join("/")}}),e}}throw new Error("ipaddr: string is not formatted like an IPv4 CIDR range")},h.IPv4.parser=function(t){let r,n,i;if(r=t.match(e.fourOctet))return function(){const t=r.slice(1,6),e=[];for(let r=0;r4294967295||i<0)throw new Error("ipaddr: address outside defined range");return function(){const t=[];let r;for(r=0;r<=24;r+=8)t.push(i>>r&255);return t}().reverse()}return(r=t.match(e.twoOctet))?function(){const t=r.slice(1,4),e=[];if((i=u(t[1]))>16777215||i<0)throw new Error("ipaddr: address outside defined range");return e.push(u(t[0])),e.push(i>>16&255),e.push(i>>8&255),e.push(255&i),e}():(r=t.match(e.threeOctet))?function(){const t=r.slice(1,5),e=[];if((i=u(t[2]))>65535||i<0)throw new Error("ipaddr: address outside defined range");return e.push(u(t[0])),e.push(u(t[1])),e.push(i>>8&255),e.push(255&i),e}():null},h.IPv4.subnetMaskFromPrefixLength=function(t){if((t=parseInt(t))<0||t>32)throw new Error("ipaddr: invalid IPv4 prefix length");const r=[0,0,0,0];let e=0;const n=Math.floor(t/8);for(;e=0;o-=1){if(!((n=this.parts[o])in e))return null;if(i=e[n],r&&0!==i)return null;16!==i&&(r=!0),t+=i}return 128-t},t.prototype.range=function(){return h.subnetMatch(this,this.SpecialRanges)},t.prototype.toByteArray=function(){let t;const r=[],e=this.parts;for(let n=0;n>8),r.push(255&t);return r},t.prototype.toFixedLengthString=function(){const t=function(){const t=[];for(let r=0;r>8,255&r,e>>8,255&e])},t.prototype.toNormalizedString=function(){const t=function(){const t=[];for(let r=0;ri&&(n=e.index,i=e[0].length);return i<0?r:`${r.substring(0,n)}::${r.substring(n+i)}`},t.prototype.toString=function(){return this.toRFC5952String()},t}(),h.IPv6.broadcastAddressFromCIDR=function(t){try{const r=this.parseCIDR(t),e=r[0].toByteArray(),n=this.subnetMaskFromPrefixLength(r[1]).toByteArray(),i=[];let o=0;for(;o<16;)i.push(parseInt(e[o],10)|255^parseInt(n[o],10)),o++;return new this(i)}catch(t){throw new Error(`ipaddr: the address does not have IPv6 CIDR format (${t})`)}},h.IPv6.isIPv6=function(t){return null!==this.parser(t)},h.IPv6.isValid=function(t){if("string"==typeof t&&-1===t.indexOf(":"))return!1;try{const r=this.parser(t);return new this(r.parts,r.zoneId),!0}catch(t){return!1}},h.IPv6.networkAddressFromCIDR=function(t){let r,e,n,i,o;try{for(n=(r=this.parseCIDR(t))[0].toByteArray(),o=this.subnetMaskFromPrefixLength(r[1]).toByteArray(),i=[],e=0;e<16;)i.push(parseInt(n[e],10)&parseInt(o[e],10)),e++;return new this(i)}catch(t){throw new Error(`ipaddr: the address does not have IPv6 CIDR format (${t})`)}},h.IPv6.parse=function(t){const r=this.parser(t);if(null===r.parts)throw new Error("ipaddr: string is not formatted like an IPv6 Address");return new this(r.parts,r.zoneId)},h.IPv6.parseCIDR=function(t){let r,e,n;if((e=t.match(/^(.+)\/(\d+)$/))&&(r=parseInt(e[2]))>=0&&r<=128)return n=[this.parse(e[1]),r],Object.defineProperty(n,"toString",{value:function(){return this.join("/")}}),n;throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range")},h.IPv6.parser=function(t){let r,e,n,i,o,p;if(n=t.match(s.deprecatedTransitional))return this.parser(`::ffff:${n[1]}`);if(s.native.test(t))return a(t,8);if((n=t.match(s.transitional))&&(p=n[6]||"",(r=a(n[1].slice(0,-1)+p,6)).parts)){for(o=[parseInt(n[2]),parseInt(n[3]),parseInt(n[4]),parseInt(n[5])],e=0;e128)throw new Error("ipaddr: invalid IPv6 prefix length");const r=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];let e=0;const n=Math.floor(t/8);for(;e
5 | Richard Worth
6 | Yehuda Katz
7 | Sean Catchpole
8 | John Resig
9 | Tane Piper
10 | Dmitri Gaskin
11 | Klaus Hartl
12 | Stefan Petre
13 | Gilles van den Hoven
14 | Micheil Bryan Smith
15 | Jörn Zaefferer
16 | Marc Grabanski
17 | Keith Wood
18 | Brandon Aaron
19 | Scott González
20 | Eduardo Lundgren
21 | Aaron Eisenberger
22 | Joan Piedra
23 | Bruno Basto
24 | Remy Sharp
25 | Bohdan Ganicky
26 | David Bolter
27 | Chi Cheng
28 | Ca-Phun Ung
29 | Ariel Flesler
30 | Maggie Wachs
31 | Scott Jehl
32 | Todd Parker
33 | Andrew Powell
34 | Brant Burnett
35 | Douglas Neiner
36 | Paul Irish
37 | Ralph Whitbeck
38 | Thibault Duplessis
39 | Dominique Vincent
40 | Jack Hsu
41 | Adam Sontag
42 | Carl Fürstenberg
43 | Kevin Dalman
44 | Alberto Fernández Capel
45 | Jacek Jędrzejewski (http://jacek.jedrzejewski.name)
46 | Ting Kuei
47 | Samuel Cormier-Iijima
48 | Jon Palmer
49 | Ben Hollis
50 | Justin MacCarthy
51 | Eyal Kobrigo
52 | Tiago Freire
53 | Diego Tres
54 | Holger Rüprich
55 | Ziling Zhao
56 | Mike Alsup
57 | Robson Braga Araujo
58 | Pierre-Henri Ausseil
59 | Christopher McCulloh
60 | Andrew Newcomb
61 | Lim Chee Aun
62 | Jorge Barreiro
63 | Daniel Steigerwald
64 | John Firebaugh
65 | John Enters
66 | Andrey Kapitcyn
67 | Dmitry Petrov
68 | Eric Hynds
69 | Chairat Sunthornwiphat
70 | Josh Varner
71 | Stéphane Raimbault
72 | Jay Merrifield
73 | J. Ryan Stinnett
74 | Peter Heiberg
75 | Alex Dovenmuehle
76 | Jamie Gegerson
77 | Raymond Schwartz
78 | Phillip Barnes
79 | Kyle Wilkinson
80 | Khaled AlHourani
81 | Marian Rudzynski
82 | Jean-Francois Remy
83 | Doug Blood
84 | Filippo Cavallarin
85 | Heiko Henning
86 | Aliaksandr Rahalevich
87 | Mario Visic
88 | Xavi Ramirez
89 | Max Schnur
90 | Saji Nediyanchath
91 | Corey Frang
92 | Aaron Peterson
93 | Ivan Peters
94 | Mohamed Cherif Bouchelaghem
95 | Marcos Sousa
96 | Michael DellaNoce
97 | George Marshall
98 | Tobias Brunner
99 | Martin Solli
100 | David Petersen
101 | Dan Heberden
102 | William Kevin Manire
103 | Gilmore Davidson
104 | Michael Wu
105 | Adam Parod
106 | Guillaume Gautreau
107 | Marcel Toele
108 | Dan Streetman
109 | Matt Hoskins
110 | Giovanni Giacobbi
111 | Kyle Florence
112 | Pavol Hluchý
113 | Hans Hillen
114 | Mark Johnson
115 | Trey Hunner
116 | Shane Whittet
117 | Edward A Faulkner
118 | Adam Baratz
119 | Kato Kazuyoshi
120 | Eike Send
121 | Kris Borchers
122 | Eddie Monge
123 | Israel Tsadok
124 | Carson McDonald
125 | Jason Davies
126 | Garrison Locke
127 | David Murdoch
128 | Benjamin Scott Boyle
129 | Jesse Baird
130 | Jonathan Vingiano
131 | Dylan Just
132 | Hiroshi Tomita
133 | Glenn Goodrich
134 | Tarafder Ashek-E-Elahi
135 | Ryan Neufeld
136 | Marc Neuwirth
137 | Philip Graham
138 | Benjamin Sterling
139 | Wesley Walser
140 | Kouhei Sutou
141 | Karl Kirch
142 | Chris Kelly
143 | Jason Oster
144 | Felix Nagel
145 | Alexander Polomoshnov
146 | David Leal
147 | Igor Milla
148 | Dave Methvin
149 | Florian Gutmann
150 | Marwan Al Jubeh
151 | Milan Broum
152 | Sebastian Sauer
153 | Gaëtan Muller
154 | Michel Weimerskirch
155 | William Griffiths
156 | Stojce Slavkovski
157 | David Soms
158 | David De Sloovere
159 | Michael P. Jung
160 | Shannon Pekary
161 | Dan Wellman
162 | Matthew Edward Hutton
163 | James Khoury
164 | Rob Loach
165 | Alberto Monteiro
166 | Alex Rhea
167 | Krzysztof Rosiński
168 | Ryan Olton
169 | Genie <386@mail.com>
170 | Rick Waldron
171 | Ian Simpson
172 | Lev Kitsis
173 | TJ VanToll
174 | Justin Domnitz
175 | Douglas Cerna
176 | Bert ter Heide
177 | Jasvir Nagra
178 | Yuriy Khabarov <13real008@gmail.com>
179 | Harri Kilpiö
180 | Lado Lomidze
181 | Amir E. Aharoni
182 | Simon Sattes
183 | Jo Liss
184 | Guntupalli Karunakar
185 | Shahyar Ghobadpour
186 | Lukasz Lipinski
187 | Timo Tijhof
188 | Jason Moon
189 | Martin Frost
190 | Eneko Illarramendi
191 | EungJun Yi
192 | Courtland Allen
193 | Viktar Varvanovich
194 | Danny Trunk
195 | Pavel Stetina
196 | Michael Stay
197 | Steven Roussey
198 | Michael Hollis
199 | Lee Rowlands
200 | Timmy Willison
201 | Karl Swedberg
202 | Baoju Yuan
203 | Maciej Mroziński
204 | Luis Dalmolin
205 | Mark Aaron Shirley
206 | Martin Hoch
207 | Jiayi Yang
208 | Philipp Benjamin Köppchen
209 | Sindre Sorhus
210 | Bernhard Sirlinger
211 | Jared A. Scheel
212 | Rafael Xavier de Souza
213 | John Chen
214 | Robert Beuligmann
215 | Dale Kocian
216 | Mike Sherov
217 | Andrew Couch
218 | Marc-Andre Lafortune
219 | Nate Eagle
220 | David Souther
221 | Mathias Stenbom
222 | Sergey Kartashov
223 | Avinash R
224 | Ethan Romba
225 | Cory Gackenheimer
226 | Juan Pablo Kaniefsky
227 | Roman Salnikov
228 | Anika Henke
229 | Samuel Bovée
230 | Fabrício Matté
231 | Viktor Kojouharov
232 | Pawel Maruszczyk (http://hrabstwo.net)
233 | Pavel Selitskas
234 | Bjørn Johansen
235 | Matthieu Penant
236 | Dominic Barnes
237 | David Sullivan
238 | Thomas Jaggi
239 | Vahid Sohrabloo
240 | Travis Carden
241 | Bruno M. Custódio
242 | Nathanael Silverman
243 | Christian Wenz
244 | Steve Urmston
245 | Zaven Muradyan
246 | Woody Gilk
247 | Zbigniew Motyka
248 | Suhail Alkowaileet
249 | Toshi MARUYAMA
250 | David Hansen
251 | Brian Grinstead
252 | Christian Klammer
253 | Steven Luscher