Как стать автором
Обновить

PC park observer — система учёта комплектующих компьютеров парка, базирующегося на MS Windows

Информационная безопасность *Системное программирование *IT-инфраструктура **nix *Статистика в IT
Из песочницы
Всего голосов 6: ↑5 и ↓1 +4
Просмотры 3.5K
Комментарии 24

Комментарии 24

Полагаю, что при наличии других систем защиты сети, может случится детект при активном сканировании портов, это я к тому, что при наличии комплексной защиты предприятия, вариант с агентом предпочтительней, иначе придётся делать кучу настроек-исключений

Да, но во-первых всегда можно сделать исключение для какого то source'а в системах защиты, а во-вторых задача изначально как раз состояла в том, чтобы не ставить что либо на клиентские машины.

Интересный костыль.

Теперь по делу.

Если мы говорим о информационной безопасности, все не нужные для реальной работы порты на клиентских машинах должны быть закрыты. В идеале средствами сетевой инфраструктуры.

Если у клиентского железа есть возможнось менять комплектующие, они будут меняться всеми кто на это способен. Меняйте железо на неразборное и не будет проблем, которые придется героически решать.

Дипломная работа была продемонстрирована?

Не всегда есть возможность брать железо прям вот не разборное... Опять таки - порты могут быть закрыты для всех, но открыты для определённых хостов. Дело как раз состоит в том, чтобы не запретить кому либо что то менять, а чтобы быть в курсе того, что было что то изменено... И нет, это не дипломка...

Не всегда есть возможность брать железо прям вот не разборное...

Справедливости ради некоторые корпуса имеют специальное "ухо" для замка. Во-вторых можно же "опечатать" системник - срыв пломбы, повод к внутреннему (или внешнему) расследованию включая штраф всем работающим.

Чаще всего системы учета нужны не для того чтобы кого-то ловить, а для бухгалтерии, "а какую именно память надо дозакупить в ПК" , списания старой техники и понимания где и что находится. Так же обычно прикручивают учет расходников (этакий складской учет для админов).

В целом, конечно ITAM-систем на рынке не так уж и много (особенно бесплатно\оупенсоурсных)

На китайских херовых корпусах никаких ушей нет, да и потом - в одном моём случае всё железо вообще встроено в стол... Во-вторых - не всегда и везде можно полагаться на пломбы - капитошка вытащит линейку памяти 3 месяца назад и каждый день осматривать пломбы тупо никто не будет (это ж человеки). В третьих - то что написано у бухов не всегда сходится с реальностью, а тут допустим с ноутом притопал - шмакнул на пимпу и в курсе где что и как...

это как менять железо на неразборное?

сразу весь парк компов?

Хорошее дополнение к сбору информации было бы - просмотр кто за этим компьютером работает. То есть посмотреть активного пользователя (который работает в данный момент на компьютере или же последний пользователей который входил в компьютер (если человек висит на стадии логина и пароля)).
Так же было бы хорошо собрать в целом всех пользователей, которые есть в компьютере и их последний вход для безопасности.
В данном случае все выше описанное поможет с определением у кого стоит компьютер, ибо компьютеры зачастую меняют своих владельцев.

Ок, учту пожелания.

Идея, конечно, неплохая - и учет и open source, но делать ключевым идентификатором MAC-адрес - в корне не правильно. Я собственно по этим строчкам кода:

networkadapters = wmic.query("SELECT * FROM Win32_NetworkAdapterConfiguration")

for nd in networkadapters:

if len(re.findall(":", str(nd['MACAddress']))) == 5 and findWholeWord('WAN Miniport')\(str(nd['Description'])) == None:

systeminfo.append(str(nd['MACAddress']))

Но что будет, если MAC-адресов несколько (в лучшем случае), отвечающих условию, или, не дай бог, первыми живыми в DeviceID окажутся адреса виртуальных адаптеров - у кого-то WMvare, у кого-то VBox и т.д., причём с одинаковыми адресами на разных машинах - что при более-менее нормальном парке машин - далеко не редкость. В лучшем случае, Вы получите постоянное изменение оборудования на данных ПК (сегодня это будет один ПК, завтра - другой). IP-адреса, кстати, тоже будут меняться при нормально настроенном DHCP). Да даже просто наберите на каком-нибудь ноутбуке (без виртуалок): wmic nic list brief

Получите 3-4 живых адаптера с MAC-адресами, описаниями (если full взять, а не brief) и не являющимися WAN Miniport.

Посмотрите, как организованы базы и сканирование, в том числе через WMI (без агентов через VB-скрипт, да и с агентами) в ManageEngine ServiceDesk или в том же SCCM (даже он не может определить единственную сетевую карту при наличии виртуального адаптера). Весь смысл учёта в актуальности данных CMDB. Да, можно, конечно не разрастаться 1500 таблицами для реально нужной информации, но без уникальной идентификации ПК не обойтись.

Про закрытый, наверняка, у какого-то немалого % ПК 135 порт или отключенную шибко умным пользователем с админскими правами WinRM или убитую в хлам базу WMI (Winmgmt) молчу - больно(.

Разумно, учту, но пока что, в принципе... Обкатывали на парке (без виртуалок) в кол-ве в 370 компиков - повторов в принципе нет... Ну а про закрытые порты... Тут да - каждый в своей реальности...

Если требуется учитывать только доменные ПК, то в рамках AD имена объекта Computer будут уникальны, да и в DNS при регистрации через DHCP будет всегда текущий IP данного ПК. Но тогда и nmap не нужен - достаточно PS (Get-ADComputer). Всё равно недоменные ПК, выявленные через сканирование сети не будут доступны учетной записи с доменными правами для изучения.

В общем же случае, если нужен именно учет, то лучше пнуть бухгалтерию и связать инвентарный номер из 1С с реальным ПК, например через расширенный атрибут объекта в AD:

$comp = Get-ADComputer -Properties Name, extensionAttribute9 $pcname | Select-Object -Property Name, extensionAttribute9

$invnum = $comp.extensionAttribute9

Записывать его туда тоже желательно не руками, а скриптом, чтобы соблюсти уникальность. Да, имена ПК тоже могут меняться, например при перезаливке, замене комплектующих (сетевая, hdd, MB) - инвентарный до списания будет тот же.

Ну а если учитывать все ПК (в том числе недоменные), то без своего, IT-шного уникального ID не обойтись.)

А еще ведь есть наверняка сетевые принтеры, МФУ, коммутаторы и т.д, доступные по SNMP...

В общем, удачи!

Да и на самих ПК проще разок прогнать скрипт PS для сбора необходимой информации, разрешив выполнение скрипта через групповые политики, например и подключив временно через net use сетевую папку на сервере, а дальше работать с полученным csv:

# Получение характеристик текущего ПК и добавление их в файл на сервере
$computerSystem = Get-WmiObject CIM_ComputerSystem
$computerBIOS = Get-WmiObject Win32_BIOS|Select-Object SerialNumber,ReleaseDate
$computerOS = Get-WmiObject CIM_OperatingSystem|Select-Object caption,Version,LastBootUpTime
$computerCPU = Get-WmiObject CIM_Processor
$Part = Get-WmiObject Win32_DiskPartition -Property *| Where-Object {$_.BootPartition -eq "True"}
$PhDisk = Get-WmiObject Win32_DiskDrive |Where-Object {$_.Index -eq $Part.DiskIndex}
$ComputerMAC=Get-WmiObject Win32_NetworkAdapter |where-Object {$_.PhysicalAdapter -eq "True" -And $_.NetEnabled -eq "True" -And $_.Name -NotLike "*Virtual*" -And $_.Name -NotLike "*Wire*" -And $_.Name -NotLike "*Bluetooth*"} |Select-Object -Property MACAddress,Name

$PC_Name = $computerSystem.Name
$PC_Man = $computerSystem.Manufacturer
$PC_Mod = $computerSystem.Model
$PC_SN = $computerBIOS.SerialNumber
$PC_BIOS_date =[Management.ManagementDateTimeconverter]::ToDateTime($computerBIOS.ReleaseDate).ToString("G")
$PC_CPU = $computerCPU.Name
$PC_Speed = $computerCPU.MaxClockSpeed
$DiskSize = "{0:N2}" -f ($PhDisk.Size/1GB)
$PC_RAM = "{0:N2}" -f ($computerSystem.TotalPhysicalMemory/1GB)
$PC_MAC = $ComputerMAC.MACAddress
$PC_Net = $ComputerMAC.Name
$PC_OS = $computerOS.caption
$PC_Version = $computerOS.Version
$PC_User = $computerSystem.UserName
$PC_Last = [Management.ManagementDateTimeconverter]::ToDateTime($computerOS.LastBootUpTime).ToString("G")
$Content = "$PC_Name;$PC_Man;$PC_Mod;$PC_SN;$PC_BIOS_date;$PC_CPU;$PC_Speed;$DiskSize;$PC_RAM;$PC_Net;$PC_MAC;$PC_OS;$PC_Version;$PC_User;$PC_Last"
Add-Content -Value $Content -Path "Y:\PCInfo.txt"

Зато потом можно показать начальству какой-нибудь красивый график в реальном времени):

Ну это когда есть возможность что то там запустить на стороне компиков... И можешь ходить и что то там монтировать... Плюс - даже если ты получишь из AD'а перечень машинок, то не факт что та или иная машинка на момент проверки будет включена или доступна как таково... В принципе - если на машинке изменится айпишник или имя хоста, то это будет расценено как изменение и об этом изменении тупо притопает уведомление, ну и в отчёте будет отражено... Графики можно в принципе нарисовать какие угодно...

Ну это когда есть возможность что то там запустить на стороне компиков... И можешь ходить и что то там монтировать...

Решается через ГП и сервисную учётку, входящую в группу локальных администраторов на ПК.

Плюс - даже если ты получишь из AD'а перечень машинок, то не факт что та или иная машинка на момент проверки будет включена или доступна как таково...

Когда включится, тогда и отправит отчёт - мы ведь не спешим)

В принципе - если на машинке изменится айпишник или имя хоста, то это будет расценено как изменение и об этом изменении тупо притопает уведомление, ну и в отчёте будет отражено...

Имя хоста меняется только специалистом техподдержки и по согласованным правилам. Смена IP (воткнули в другую розетку, включили через время, превышающее время аренды в DHCP) ни на что не влияет. Речь о первоначальном сборе информации. Дальше - запрашиваешь изменения конфигурации по имени хоста хоть каждый час.

Исключения - пользователь с административными правами исключил сервисную учётную запись (группу) из группы локальных администраторов, установил сторонний антивирус, отключил службы управления и т.п. - если не лечится через ГП, то блокировка в AD как юзера, так и ПК + блокировка MAC-адреса на коммутаторе до выяснения. После выяснения - в лучшем случае обычный юзер.

Из практики на 5т юзеров / 3т+ ПК таких деятелей встречается максимум 20 человек/ПК - на статистику не влияет).

И да, графики можно рисовать, а можно использовать, если сам начальник), например для планирования закупок на следующий год и, например, контроля работы службы поддержки (обновление ОС, например, инвентаризация).

Все данные можно вполне выгружать из веб морды в тот же эксель... А дальше чё хошь рисуй...

Ну это в вашей реальности всё так устроено... В моей реальности в принципе смена имени хоста - не такая уж и редкая история (они могут меняться динамически вполне)... Ну и сетки где нет AD'a тоже как бы имеются... Тут как бы не существует швейцарского ножа... Я учту замечания и пожелания, но в эту сторону (в плане что то там на хосты заливать, через ГП выполнять и т.п.) - расширяться сей проект не будет...

Ну это в вашей реальности всё так устроено... 

Конечно, у каждого своя реальность.) Вы пишите проект прежде всего для себя и под свои нужды, а потом уже open source, если кому-то подойдет Ваша концепция, иначе это уже стоит денег). Просто делюсь опытом - нам вполне хватает SCCM для управления, связанного с ним SD для техподдержки и учёта + вывод дополнительных отчётов в дашборд SD для руководства в виде виджетов PBI, если таковых не хватает в самих SCCM и SD). В любом случае, надо отталкиваться от регламентов и культуры организации, ну и постоянно совершенствоваться)

 Ну и сетки где нет AD'a тоже как бы имеются

P.S. Разумеется, в современной организации до 30%-40% подключенных к сети ПК (ноутбуков) и 99% подключенных по Wi-Fi смартфонов могут быть не доменными, а значит неуправляемыми службой IT, опять таки вопрос к регламентам - куда Вы их пускаете в Вашей локальной сети - если только к Интернет, то вопросов нет и учитывать, я думаю, Вы их просто не захотите - они же, как правило личные, ну, или, как минимум необслуживаемые в полном объеме. И уж тем более Вы не станете, надеюсь, их nmap'ить и брутфорсить, чтобы получить к ним доступ и считать конфигурацию). А вот если Вы захотите пустить их к внутренним ресурсам...

если только к Интернет

PPS. Тут тоже куча нюансов, особенно для сетевиков и безопасников. Регламенты приплывают и сверху в организацию). Как минимум, доступ к проводной сети/Wi-Fi только идентифицированным пользователям, гостям - как минимум по номеру телефона, с логированием для очень проверяющих органов (ACL, отдельные VLAN и т.д.), а если ещё и несовершеннолетние в сети присутствуют (отдельный DNS с блокировкой нежелательного трафика и т.д.). Тут только серьёзный LMS поможет с контролем подключенных устройств.

Никто ничего не брутфорсит... Всё просто - открыт порт на хосте или нет... И да- ничего не получится узнать, если ты не в курсе того, что за учётки на хосте... А по поводу регламентов - тут у каждого свои...

Если вопрос в том, что пригодилось сие кому то или нет - пригодилось...

Софт, как я понимаю, еще не планировали инвентаризировать в вашей утилите?

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.