Задать вопрос
  • Что это такое и как защититься?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    По двору прошелся жулик и попытался хакнуть эксплойтом для "майбаха" (условно) все тачки в вашем дворе. Майбахов не нашлось, этот жулик пошел дальше и забыл уже про ваш дворик.

    Надо ли защищаться от атаки, не релевантной вашему сетапу? Не надо.
    Надо ли делать выводы об уязвимости того или иного оборудования? Надо.
    Надо ли проверять свои конфигурации на эксплойты? Надо.
    Надо ли реагировать на всякую нерелевантную хрень в логах с ошибками порядка 400? Не надо.
    Надо ли позаботиться об оркестрации быстрого развёртывания ваших серверов на случай взломов или проблем с железом? Конечно надо!

    Вообще, если ваш сетап на виртуальных машинах в повторяемой среде и с декларативной конфигурацией вроде кубера или докера, то вы легче сможете пережить всякие такие факапы.
    Схема такая.
    Есть признаки взлома - бэкап логов, снапшот базы, бэкап стораджа, остановка сервисов (если позволяет продакшн), анализ атаки и последствий. Устраняем уязвимость по вектору атаки (гугление по логам и курение тредов), правим конфиги развёртывания и запускаем прод. Потом долго и тщательно разбираемся по логам, снапшотам и бэкапам что затронуто. Делаем тестовый чистый сетап по старой конфигурации и сравниваем пофайлово с атакованной системой, выясняем в какие места вмешались злодеи. Дифаем базу и смотрим на подозрительные различия. Делаем выводы, объявляем об утекших данных, если есть такие признаки (чтобы не подставлять пользователей), принимаем превентивные меры против похожих векторов атак.

    Итого, залог успеха - это хранение конфигураций в гит-репозитории, своевременные бэкапы, хранение бэкапов на отдельных изолированных стораджах, оркестрация и автоматизация развертывания, подробное эшелонирование логирование с бэкапами логов, смоук тесты на нестандартную активность в БД, по сетевым интерфейсам, трафику, процессору, памяти, файловым системам, логам...

    Это взгляд дилетанта по безопасности, если чего пропустил -- поправьте. Если где не прав -- расскажите.
    Ответ написан
    3 комментария
  • C:\Users\ivan\.sambox.cache Что за файл?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Кэш системных шрифтов модуля SAMBox из Sejda SDK.
    https://github.com/torakiki/sambox
    Ответ написан
    Комментировать
  • Как преобразовать объект Get-Acl?

    @NortheR73
    системный инженер
    Get-Acl возвращает вам, по сути, набор строк. Перебираете этот набор с помощью Foreach и добавляете каждую строку как node нужного уровня в TreeView:
    PS C:\windows\system32> (Get-Acl c:\!New).Access.IdentityReference.Value
    BUILTIN\Администраторы
    NT AUTHORITY\СИСТЕМА
    BUILTIN\Пользователи
    NT AUTHORITY\Прошедшие проверку
    NT AUTHORITY\Прошедшие проверку
    Ответ написан
    1 комментарий
  • Почему переменная перестаёт выводиться в терминал?

    @MaxKozlov Куратор тега PowerShell
    То же самое, что и в прошлый раз.
    У вас в выводе встречаются несколько разных объектов
    Сначала $lol.IdentityReference
    потом $myArray
    Состав полей у объектов разный. Перед выводом, собственно на экран (хост), Powershell буферизует вывод и пытается его подстроить под вас.
    Для этого он берёт состав полей второго объекта (там список с полями)
    PS полагает, что данный объект и должен быть примером, поэтому пытается выводить на экран для первого объекта те же поля, что и для второго. А там их, конечно, нет. В результате не выводится ничего.
    Промежуточный вывод на хост через Format- разбивает буфер и вы видите оба объекта со своими полями

    Ну и, как я писал в прошлый раз, необходимо выводить всё единообразно. Работаете только с экраном ?
    Используйте Out-Host, Write-Host, Format-xxx
    Хотите выводить в потоки, переменные и тп - используете обычные выводы
    Фактически ваш вызов $lol.IdentityReference это для Powershell $lol.IdentityReference | Out-Default, потому что далее этот вывод никуда не попадает, ни в переменную, ни в поток

    А вам явно бы хотелось Out-Host
    Ответ написан
    3 комментария
  • Как правильно передать параметр для экспорта в CSV?

    @BeatHazard
    По первому вопросу не совсем понятно, чего вы хотите добиться? В приведенном вами скрипте, в блоке foreach команда
    Get-ADGroupMember -Identity $item.Groups | Select-Object SamAccountName, Name | Export-CSV "C:\dst\cll.CSV" -NoTypeInformation -Encoding UTF8
    перезатирает предыдущие данные при каждом прохождении цикла, если вам нужно сохранять данные - добавьте в конце ключ -append, если это не то, что нужно напишите, какой результат вы ожидаете увидеть в CSV файле, в остальном команда корректно выгружает список пользователей группы в CSV файл.
    По второму вопросу - чтобы получать дополнительные атрибуты объекта из AD перечислите их в ключе -Properties для команды Get-ADUser, например
    Get-ADUser -identity KolpakovMD1  -Properties description
    Ответ написан
    1 комментарий
  • Почему переменная перестала выводить ответ?

    @MaxKozlov Куратор тега PowerShell
    У вас так всё намешано...
    Где-то forma-table, где-то просто "вывод", где-то чтение с хоста.
    Get-Srv($param), который в случае двух параметров превратится в массив...
    Не выводится, скорее всего, потому, что PS очень хочет вам угодить, пытаясь подстроить вывод. Но не может :)

    Я бы предложил хорошенько поработать над структурой, убрать рекурсию и правильно разделить ответственность между функциями
    типа
    function Show-SrvFolderList($kat_addr) { # Получаем на вход уже готовый путь к серверу
        Get-Children -Path $kat_addr | Format-Table Name
    }
    function Show-FolderAccess($inp_res) { #  увидеть список групп, с исключениями
        $lol2 = Get-Acl $inp_res
        $lol2 = $lol2.Access | Where-Object {
            $_.IdentityReference -notlike "*blabla1*" -and
            $_.IdentityReference -notlike "*blabla2*" -and 
            $_.IdentityReference -notlike "*blabla3*" -and 
            $_.IdentityReference -notlike "*blabla4*" -and 
            $_.IdentityReference -notlike "*blabla5*"
        }
        $lol2 | Format-Table
    }
    
    $srv_name = Read-Host "Введите сервер"
    $kat_addr = '\\' + $srv_name + '\Folder' # На каждом сервере есть определенная папка \Folder, которая подставляется в Get-Children. 
    do {
        Show-SrvFolderList
        # После того, как увидели все каталоги, можем выбрать один из них
        $inp_res = Read-Host "Введите ресурс или 1"
        if ($inp_res -eq '1') { break }
        Show-FolderAccess ($kat_addr + '\'  + $inp_res)
    } while ($true)


    Функции переименованы, чтобы было понятно что они делают
    Причём они Show, а не Get, потому что на самом деле они ничего не возвращают, а только показывают
    Ответ написан
    1 комментарий
  • Как ограничить вывод?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Powershell работает с объектами и фильтровать надо объекты. По факту вы хотите получить элементы свойства Access и отфильтровать их - вот и пишите этот фильтр явно, а потом преобразовывайте выдачу в нужный вам формат . Для одного субъекта это делается примерно так(выдачаформатируется так же, как и у вас):
    (Get-Acl \\addr\addr).Access | Where {$_.IdentityReference -ne 'Домен\Группа'} | ForEach ([String]$_.IdentityReference, String]$_.AccessControlType, [String]$_.FileSystemRights) -join ' '}

    Чтобы отфильтровать несколько групп либо добавьте в команду Where дополнительные аналогичные условия, объединив их по && , либо добавьте команды Where для каждой такой группы
    Теоретически, можно отфильтрофать и результат команды Format-List, которой вы пользуетесь, но это сложнее: она возвращает не строки, а весьма нетривиальные объекты, которые потом формируют выдачу
    Ответ написан
    2 комментария
  • Как ограничить вывод?

    @BeatHazard
    Приветствую.
    Можете вывести нужные вам данные таким образом, ограничив вывод нужных групп в -notlike укажите, какую группу нужно скрыть.
    $lol = get-acl \\10.24.66.14\share 
    $lol = $lol.Access | Where-Object {$_.IdentityReference -notlike "S-1-22-2-1958201108"}
    $lol

    Можно дополнительно сделать переменную с массивом списком групп которые не нужны и воспользоваться -notcontains если групп много.
    Ответ написан
    1 комментарий