Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Поиск уч.записей принадлежащих одному владельцу (http://forum.oszone.net/showthread.php?t=346300)

ejik_off 31-08-2020 10:55 2932539

Поиск уч.записей принадлежащих одному владельцу
 
Доброе время суток!!!
Нужна помощь ваша помощь в написании скрипта.
Задача: есть файл с учетными записями, у которых в AD одинаковые пароли. Нужно этим пользователям отправить письмо с просьбой изменить пароль на уникальный и где-то сохранить что этому пользователю было отправлено сообщение допустим в эксель добавить имя уч.записи и указать цифру 1, если письмо было отправлено первый раз. 2 - если это уже второе уведомление и тд.
есть также у пользователей спец. учетки с повышенными привилегиями. Они отличаются префиксом. например есть пользователь Василий Пупкин, его учетка - vpupkin, и у него есть с правами локального админа для работы на серверах admsrv_vpupkin. Естественно пароли для этих учеток должны быть разные, но человеческий фактор никто не отменял. По этому требуется проверять файл и на подобные случаи.
Вот как выглядит файл
Скрытый текст
Код:

Group 1:
iivanov
ppetrov
ssidorov
ttimofeev
Group 2:
rsemenov
mmironov
Group 3:
admdcs_ddmitriev
admsrv_ddmitriev
admwks_ddmitriev
ddmitriev
Group 4:
admsrv_lpavlov
admwks_lpavlov
lpavlov
Group 5:
admdcs_vtitov
admsrv_vtitov
Group 6:
admwks_gsergeev
admsrv_gsergeev
gsergeev


Вот такой код я накидал
Код:

$filetxt = gc "C:\Temp\AccSamePass-t.txt"

for ($a=1;$a -le $filetxt.Count; $a++) {
 
    if($filetxt[$a] -like "Group*" -or $filetxt[$a] -like '') { continue }

    for ($i=$a+1; $i -le $filetxt.Count; $i++) {     
   
      if($filetxt[$i] -like "Group*" -or $filetxt[$i] -like '') { continue }

        if ($filetxt[$a].Contains($filetxt[$i])) {

                Write-host "Найдены УЗ с одинаковыми паролями:"

                $filetxt[$a]

                $filetxt[$i]

                }

        if ($filetxt[$a] -like "adm[a-z]_*") {

            $item = $filetxt[$a].Substring(2)

            if ($filetxt[$i].Contains($item)) {

                Write-host "Найдены УЗ с одинаковыми паролями_1:"

                $filetxt[$a]

                $filetxt[$i]

                }
        }

    }

}

Такой результат я получаю
Скрытый текст
Найдены УЗ с одинаковыми паролями:
admdcs_ddmitriev
ddmitriev
Найдены УЗ с одинаковыми паролями:
admsrv_ddmitriev
ddmitriev
Найдены УЗ с одинаковыми паролями:
admwks_ddmitriev
ddmitriev
Найдены УЗ с одинаковыми паролями:
admsrv_lpavlov
lpavlov
Найдены УЗ с одинаковыми паролями:
admwks_lpavlov
lpavlov
Найдены УЗ с одинаковыми паролями:
admwks_gsergeev
gsergeev
Найдены УЗ с одинаковыми паролями:
admsrv_gsergeev
gsergeev

Не получается обработать все уч.з сразу, т.е если их больше 2х, как например в случае с ddmitriev. У него 4 уч.з, и на всех один пароль, хотел сделать что бы скрипт обработал их за раз, и в одном письме указал все уч.з.
и второе, скрипт пропустил группу 5, где указаны уч.з admdcs_vtitov, admsrv_vtitov

Iska 31-08-2020 20:29 2932592

Цитата:

Цитата ejik_off
Нужно этим пользователям отправить письмо с просьбой изменить пароль на уникальный и где-то сохранить что этому пользователю было отправлено сообщение допустим в эксель добавить имя уч.записи и указать цифру 1, если письмо было отправлено первый раз. 2 - если это уже второе уведомление и тд. »

Вообще-то, необходимо и достаточно программно установить флажок «Требовать смены пароля при следующем входе в систему» в свойствах учётной записи. И всё.

Естественно, должны быть заданы требования на неповторяемость N новых паролей пользователя на уровне домена.

ejik_off 01-09-2020 07:51 2932606

Цитата:

Цитата Iska
Вообще-то, необходимо и достаточно программно установить флажок «Требовать смены пароля при следующем входе в систему» в свойствах учётной записи. И всё.
Естественно, должны быть заданы требования на неповторяемость N новых паролей пользователя на уровне домена. »

Все требования по парольной политике установлены, но это ни как не препятствует установке одинаковых паролей для нескольких уч.з

Elven 01-09-2020 09:58 2932616

Iska, я так понимаю проблема не с установкой одинаковых паролей для одной учетки (это действительно легко разруливается политиками), а одинаковыми паролями на разные учетки одного пользователя (например рабочая учетка, уетка с правами локального админа на компах домена, учетка с правами доменного админа и т.д.). К сожалению здесь мы ограничены человеческим фактором, насколько мне известно. МС любит замороченные политики, но не на столько чтобы позволять объединять учетки в своеобразный массив, каждый из членов которого не может иметь пароля, который уже используется у другого члена массива.
ejik_off, стесняюсь спросить, но всё же спрошу: как был выявлен факт использования одинаковых паролей? Если это был сигнал от безопасников с какого-то их хитрого софта (емнип работу назад кто-то из безопасников одного коллегу этим и напряг изрядно), то контроль за этим делом и стоит возложить на безопасников. В противном случае нужно будет рисовать какую-то функцию для сравнения элементов каждого с каждым, на входе давать массив из имен, на выходе, соответсвенно, true или false. Это, кмк, будет самым простым решением на posh, но даже за такой вариант браться не особенно хочется, если может быть вариант попроще.

ejik_off 01-09-2020 12:53 2932630

Elven, Это и не только делается с помощь модуля https://github.com/MichaelGrafnetter/DSInternals

Elven 01-09-2020 15:12 2932641

Я Вам про Фому, Вы мне про Ерёму... но да ладно. Сравнивать все равно можно так, как я уже описал выше, правда я не припомню чтобы пароли из АД можно было выдирать в пригодном для сравнения виде, но если таковая возможность у Вас имеется - велкам.
Код:

function matchinarray ($array) {
    for ($i=0; $i -lt $array.count;$i++) {
        for ($j=0; $j -lt $array.count;$j++) {
            if (($array[$i].TipaPassword -eq $array[$j].TipaPassword) -and ($i -gt $j)) {
                Write-Host "Nehoroshi chelovek!"
                Write-Host $array[$i].Name $array[$j].Name
            }
        }
  }
}

$users = @(Get-ADUser -Filter *)

matchinarray $users

з.ы. как оно сработает - хз, тестировал на сравнении фамилий, теперь у меня есть список однофамильцев :)

А ну и да, не понимаю почему учетки берутся из какого-то текстового файла, а не из АД напрямую.

ejik_off 01-09-2020 18:47 2932662

Цитата:

Цитата Elven
Я Вам про Фому, Вы мне про Ерёму... »

Видимо Вы меня не поняли. DSInternals - это модуль PS с помощью которого можно проводить аудит паролей в ад. Что бы избежать использования шаблонных паролей (например: Сентябрь2020) по парольной политике такой пароль проходит, но с точки зрения безопасности он не подходит. Вот так выглядит отчет
Скрытый текст

Active Directory Password Quality Report
----------------------------------------

Passwords of these accounts are stored using reversible encryption:

LM hashes of passwords of these accounts are present:

These accounts have no password set:
DefaultAccount
Гость

Passwords of these accounts have been found in the dictionary:

Historical passwords of these accounts have been found in the dictionary:

These groups of accounts have the same passwords:
Group 1:
viktor
Администратор
Group 2:
iivanov
ppetrov
ssidorov
vpupkin

These computer accounts have default passwords:

Kerberos AES keys are missing from these accounts:

Kerberos pre-authentication is not required for these accounts:

Only DES encryption is allowed to be used with these accounts:

These administrative accounts are allowed to be delegated to a service:
krbtgt
viktor
Администратор

Passwords of these accounts will never expire:
DefaultAccount
iivanov
ppetrov
ssidorov
viktor
vpupkin
Гость

These accounts are not required to have a password:
DefaultAccount
Гость


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

Iska 01-09-2020 23:23 2932674

Цитата:

Цитата ejik_off
но это ни как не препятствует установке одинаковых паролей для нескольких уч.з »

А этого никогда и не требовалось.

И явно не «все…»: чтобы не было подбора по радужным таблицам — включают блокировку учётных записей после нескольких неправильных попыток.

Elven 02-09-2020 06:57 2932681

ejik_off, я то вас понял, а вот вы меня - явно нет. я знаю и за этот модуль, и как работает мимкатц, от которого вы хотите придумать затычку. Откуда вы будете учетки выгребать - дело ваше, точно так же как я брал их из АД в вышеприведенном примере, их можно цеплять из текстового файла, НО! остается открытым вопрос откуда брать пароль. Найдете - хорошо, переделать скрипт под свои нужды дело десяти минут.
dixi

ejik_off 02-09-2020 07:12 2932682

Цитата:

Цитата Iska
И явно не «все…»: чтобы не было подбора по радужным таблицам — включают блокировку учётных записей после нескольких неправильных попыток. »

С этим все понятно. Речь не идет о переборе, но если сильно хочется можно выгрузить базу ад и подобрать пароль офлайн.
Цитата:

Цитата Iska
А этого никогда и не требовалось. »

То есть если пользователи все будут использовать один пароль ничего страшного в этом нет?
Цитата:

Цитата Elven
НО! остается открытым вопрос откуда брать пароль. »

Зачем пароль?

Busla 02-09-2020 11:49 2932696

Код:

Get-Content 'c:\temp\AccSamePass-t.txt' `
| Where-Object { $_ -notmatch ':$' } `
| Group-Object -Property {$_ -replace 'adm[^_]*_', ''} `
| ForEach-Object {
    $user = Get-AdUser $_.Name -Property Mail
    $badPasswordLogins = $_.Group -join "`n`r"
    $body = "Привет, $($user.Name)! `n`r Смени пароли у учётных записей:`n`r$badPasswordLogins"
    Send-MailMessage -To $user.Mail -Subject 'смена пароля' -Body $body
    Add-Content -Path 'c:\temp\рассылка.log' -Value "$(Get-Date -Format s)`t$badPasswordLogins"
}

из лога сделаете выборку и получите количество писем

Цитата:

Цитата Iska
чтобы не было подбора по радужным таблицам — включают блокировку учётных записей после нескольких неправильных попыток »

лучше не пишите умные слова, смысла которых не понимаете - не так смешно будет

радужные таблицы хранят (в алгоритмической форме) сопоставление пароля и хэша (или другое сопоставление)
соответственно по ним не долбятся в систему с неудачными попытками

Iska 02-09-2020 12:31 2932699

Busla, не могу с Вами согласиться, коллега: если совсем не писать — то кто сможет развенчать мои искренние заблуждения, кто скажет, что я не понимаю смысла? А теперь — вот :).

Спасибо за разъяснение.


Цитата:

Цитата ejik_off
То есть если пользователи все будут использовать один пароль ничего страшного в этом нет? »

Нет. Если пользователи не делятся этим фактом друг с другом.

ejik_off 02-09-2020 13:03 2932702

Busla, Спасибо за скрипт!!!!
Цитата:

Цитата Iska
Нет. Если пользователи не делятся этим фактом друг с другом. »

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

Iska 02-09-2020 13:52 2932708

Цитата:

Цитата ejik_off
Мысль я думаю понятна. »

Да.


Время: 09:38.

Время: 09:38.
© OSzone.net 2001-