Computer >> 컴퓨터 >  >> 체계 >> Windows Server

감사 정책을 사용하여 Windows Server에서 누가 파일을 삭제했는지 감지하는 방법은 무엇입니까?

파일 시스템 개체 액세스 이벤트 감사를 사용하여 특정 파일을 생성, 삭제 또는 수정한 특정 사용자를 식별할 수 있습니다. 이 문서에서는 Windows Server 2016의 공유 네트워크 폴더에 있는 파일에 대한 이벤트 감사를 구성하는 방법을 보여줍니다. 감사를 구성한 후 이벤트 뷰어의 정보를 사용하여 파일에서 특정 파일을 삭제한 사용자를 찾을 수 있습니다. 섬기는 사람.

공유 네트워크 폴더에서 파일을 삭제하면 사용자의 휴지통으로 전송되지 않고 즉시 삭제됩니다. 공유 폴더에 열려 있는 파일 목록은 다음과 같이 얻을 수 있습니다.

Windows에서 파일 및 폴더 액세스 감사 정책을 활성화하는 방법

기본적으로 Windows Server에서는 파일 시스템 개체 액세스 감사가 활성화되어 있지 않습니다. 그룹 정책을 사용하여 감사 설정을 활성화하고 구성할 수 있습니다. 여러 서버 또는 컴퓨터에서 감사 정책을 활성화해야 하는 경우 도메인 GPO(gpmc.msc를 사용하여 구성 가능)를 사용할 수 있습니다. mmc 콘솔). 하나의 서버에서만 감사를 구성하려는 경우 로컬 그룹 정책 편집기를 사용할 수 있습니다.

  1. 로컬 그룹 정책 편집기 콘솔 열기 – gpedit.msc;
  2. 고급 감사 정책이 있는 GPO 섹션으로 이동:Windows 설정 -> 보안 설정 -> 고급 감사 정책 구성 -> 개체 액세스
  3. 감사 파일 시스템 열기 정책을 만들고 파일 시스템 개체에 대한 성공적인 액세스 이벤트만 기록하도록 지정합니다(다음 감사 이벤트 구성 -> 성공 ); 객체 액세스 감사를 사용하여 로컬 객체 액세스 감사를 활성화할 수도 있습니다. Windows 설정 -> 보안 설정 -> 로컬 정책 -> 감사 정책 아래의 정책 . 그러나 NTFS 액세스 이벤트만 추적하므로 파일 시스템 감사 정책을 사용하는 것이 좋습니다. 감사 정책을 사용하여 Windows Server에서 누가 파일을 삭제했는지 감지하는 방법은 무엇입니까?
  4. 변경 사항을 저장하고 gpupdate /force 명령을 사용하여 로컬 그룹 정책 설정을 업데이트합니다. .

공유 폴더에서 파일 삭제 감사 설정 구성

이제 액세스를 추적하려는 공유 네트워크 폴더의 속성에서 감사를 구성해야 합니다. 파일 탐색기를 실행하고 폴더 속성을 엽니다. 보안으로 이동 탭. 고급을 클릭합니다. 버튼 -> 감사로 이동 탭.

"관리자여야 하거나 이 개체의 감사 속성을 볼 수 있는 적절한 권한이 부여되었습니다. "가 나타나면 계속 을 클릭하십시오. 버튼.

감사 정책을 사용하여 Windows Server에서 누가 파일을 삭제했는지 감지하는 방법은 무엇입니까?

그런 다음 추가를 클릭합니다. 버튼을 눌러 감사 이벤트를 캡처할 사용자 또는 그룹을 지정합니다. 모든 사용자의 액세스 이벤트를 추적하려면 모든 사용자를 지정합니다. 그룹.

그런 다음 기록해야 하는 개체에 액세스하는 데 사용되는 권한을 지정해야 합니다. 이벤트 로그에 파일 삭제 이벤트만 저장하려면 고급 권한 표시 단추. 이벤트 목록에서 폴더 및 파일 삭제 이벤트에 대해서만 감사 남기기 – 삭제하위 폴더 및 파일 삭제 .

감사 정책을 사용하여 Windows Server에서 누가 파일을 삭제했는지 감지하는 방법은 무엇입니까?

도움말 . Windows 개체에 대한 감사 정책에는 추가 컴퓨팅 리소스가 필요합니다. 주의해서 사용하고 항상 기록할 감사 개체 및 이벤트의 수를 최소화하도록 노력하십시오.

$Path = "E:\Public"
$AuditChangesRules = New-Object System.Security.AccessControl.FileSystemAuditRule('Everyone', 'Delete,DeleteSubdirectoriesAndFiles', 'none', 'none', 'Success')
$Acl = Get-Acl -Path $Path
$Acl.AddAuditRule($AuditChangesRules)
Set-Acl -Path $Path -AclObject $Acl

이제 사용자가 공유 네트워크 폴더에서 파일이나 폴더를 삭제하면 파일 시스템 -> 감사 성공 파일 삭제 이벤트가 이벤트 ID 4663으로 보안 로그에 나타납니다. Microsoft Windows 보안 감사 출처.

이벤트 뷰어 열기 mmc 콘솔(eventvwr.msc ), Windows 로그 확장 -> 보안 부분. EventID 4663으로 이벤트 로그 필터를 활성화합니다.

감사 정책을 사용하여 Windows Server에서 누가 파일을 삭제했는지 감지하는 방법은 무엇입니까?

이벤트 뷰어에서 나머지 이벤트를 엽니다. 보시다시피 삭제된 파일의 이름, 파일을 삭제한 사용자의 계정 및 프로세스 이름에 대한 정보가 포함되어 있습니다.

 object.subject :security id :jsmithaccount 도메인 :0x32b12627Object :object 서버 :securityObject 유형 :fileObject 이름 :e :\ distr \ backup.rarhandle ID :0x7bc4Resource 속성:            S:AIProcess 정보:프로세스 ID:                            0x4Process Name:Access Request Information:Accesses:      0 0         LE                                                                  

감사 정책을 사용하여 Windows Server에서 누가 파일을 삭제했는지 감지하는 방법은 무엇입니까?

파일 액세스 감사 정책을 활성화한 후 보안 로그에서 찾을 수 있습니다.

  • 공유 네트워크 폴더에서 파일을 삭제한 사람과 삭제된 시기
  • 파일 삭제에 사용된 애플리케이션(프로세스)
  • 복원할 백업 날짜는 언제입니까?

SQL 데이터베이스(MySQL/MSSQL)에 파일 삭제 이벤트를 작성하는 방법

그러나 삭제된 파일에 대한 감사가 활성화되어 있어도 로그에서 무언가를 찾는 것이 번거로울 수 있습니다. 첫째, 수천 개의 이벤트 중에서 특정 항목을 찾기가 상당히 어렵습니다(Windows에는 유연한 필터로 이벤트를 검색할 수 있는 편리한 도구가 없습니다). 둘째, 파일이 오래 전에 삭제된 경우 새 이벤트로 덮어쓰기 때문에 이 이벤트가 로그에 없을 수 있습니다.

모든 파일 삭제 이벤트를 SQL 데이터베이스에 저장할 수 있습니다. Microsoft SQL Server, Elasticsearch 또는 MySQL/MariaDB 데이터베이스를 사용하여 이벤트를 저장할 수 있습니다.

이 예에서는 감사 이벤트를 MySQL의 별도 데이터베이스 테이블에 기록하는 방법을 보여줍니다. 다음 표 형식을 사용하겠습니다.

  • 서버 이름,
  • 삭제된 파일의 이름,
  • 날짜 및 시간,
  • 파일을 삭제한 사용자의 이름입니다.

이 테이블을 생성하기 위한 MySQL 쿼리는 다음과 같습니다.

CREATE TABLE deleted_items (id INT NOT NULL AUTO_INCREMENT, server VARCHAR(100), file_name VARCHAR(255), dt_time  DATETIME, user_name VARCHAR(100),  PRIMARY KEY (ID));

참고 . PowerShell에서 MySQL 데이터베이스에 액세스하는 방법의 예는 이전에 PowerShell로 MySQL 데이터베이스 쿼리 문서에서 고려되었습니다.

Microsoft SQL Server 데이터베이스를 사용하려면 "PowerShell에서 MSSQL Server 쿼리를 실행하는 방법?" 기사를 확인하세요.

현재 날짜의 보안 로그에서 EventID 4663이 있는 이벤트를 가져오려면 다음 PowerShell 스크립트를 사용할 수 있습니다.

$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach {
$event = [xml]$_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$File = $event.Event.EventData.Data[6]."#text"
$User = $event.Event.EventData.Data[1]."#text"
$Computer = $event.Event.System.computer
}
}

감사 정책을 사용하여 Windows Server에서 누가 파일을 삭제했는지 감지하는 방법은 무엇입니까?

다음 PowerShell 스크립트는 원격 서버(IP 주소 10.1.1.13 사용)의 MySQL 데이터베이스에 가져온 데이터를 씁니다.

Add-Type –Path ‘C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v4.5\MySql.Data.dll'
$Connection = [MySql.Data.MySqlClient.MySqlConnection]@{ConnectionString='server=10.1.1.13;uid=posh;pwd=P@ssw0rd;database=aduser'}
$Connection.Open()
$sql = New-Object MySql.Data.MySqlClient.MySqlCommand
$sql.Connection = $Connection
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach {
$event = [xml]$_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$File = $event.Event.EventData.Data[6]."#text"
$File = $File.Replace(‘\’,’|’)
$User = $event.Event.EventData.Data[1]."#text"
$Computer = $event.Event.System.computer
$sql.CommandText = "INSERT INTO deleted_items (server,file_name,dt_time,user_name ) VALUES ('$Computer','$File','$Time','$User')"
$sql.ExecuteNonQuery()
}
}
$Reader.Close()
$Connection.Close()

이벤트를 외부 데이터베이스에 저장한 후 이 이벤트 로그를 지울 수 있습니다.

이제 누가 "AnnualReport.DOC 파일을 삭제했는지 알아내십시오. ", PowerShell 콘솔에서 다음 스크립트를 실행하면 충분합니다.
$DeletedFile = "%AnnualReport.DOC%"
Set-ExecutionPolicy RemoteSigned
Add-Type –Path ‘C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v4.5\MySql.Data.dll'
$Connection = [MySql.Data.MySqlClient.MySqlConnection]@{ConnectionString='server=10.1.1.13;uid=posh;pwd=P@ssw0rd;database=aduser'}
$Connection.Open()
$MYSQLCommand = New-Object MySql.Data.MySqlClient.MySqlCommand
$MYSQLDataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter
$MYSQLDataSet = New-Object System.Data.DataSet
$MYSQLCommand.Connection=$Connection
$MYSQLCommand.CommandText="SELECT user_name,dt_time    from  deleted_items where file_name LIKE '$DeletedFile'"
$MYSQLDataAdapter.SelectCommand=$MYSQLCommand
$NumberOfDataSets=$MYSQLDataAdapter.Fill($MYSQLDataSet, "data")
foreach($DataSet in $MYSQLDataSet.tables[0])
{
write-host "User:" $DataSet.user_name "at:" $DataSet.dt_time
}
$Connection.Close()

이제 PS 콘솔에서 사용자 이름과 파일이 삭제된 시간을 볼 수 있습니다.

감사 정책을 사용하여 Windows Server에서 누가 파일을 삭제했는지 감지하는 방법은 무엇입니까?

참고 . 문제가 발견되었기 때문에 "\ "가 데이터베이스에 기록되지 않고 "|로 대체되었습니다. ". 따라서 파일의 전체 경로를 표시해야 하는 경우 데이터베이스에서 선택할 때 역대체를 수행할 수 있습니다.

$DataSet.file_name.Replace(‘|’,’\’).

이벤트 로그의 정보를 데이터베이스에 기록하는 스크립트는 작업 스케줄러를 사용하여 하루가 끝날 때 실행하거나 더 많은 리소스를 소비하는 파일 삭제 EventID(On Event)에 첨부할 수 있습니다. 시스템 요구 사항에 따라 다릅니다.

도움말 . 보안 이벤트 로그 파일의 최대 크기를 그날의 모든 이벤트를 기록할 수 있을 만큼 충분히 크게 설정했는지 확인하십시오. 그렇지 않으면 하루에 한 번 이상 또는 트리거에서 데이터를 데이터베이스로 내보내는 작업을 실행해야 합니다. 일반적으로 최대 로그 크기 워크스테이션에서 최소 64이어야 합니다. MB 및 262 Windows 파일 서버의 MB. 이전 이벤트를 덮어쓰는 옵션은 활성화된 상태로 두어야 합니다(필요에 따라 이벤트 덮어쓰기 ).

필요한 경우 간단한 PHP 웹 페이지를 만들어 파일을 삭제한 사용자에 대한 정보를 보다 편리한 형태로 얻을 수 있습니다.

중요 팁 . 로그에 사용자가 파일을 삭제했다는 항목이 포함되어 있으면 서두르지 말고 고의적이거나 악의적인 작업으로 해석하십시오. 많은 프로그램(특히 MS Office 앱)은 변경 사항을 저장할 때 임시 파일을 만든 다음 파일의 이전 버전을 삭제합니다. 이 경우 파일이 삭제된 프로세스 이름(ProcessName fileld)의 로깅을 활성화하고 이를 기반으로 파일 삭제 이벤트를 구문 분석할 수 있습니다. 또는 winword.exe, excel.exe 등과 같은 프로세스에서 이벤트를 필터링할 수 있습니다.

텍스트 파일에 파일 삭제 감사 이벤트 기록

별도의 데이터베이스 서버를 사용하지 않으려면 파일 삭제 감사 이벤트를 일반 텍스트 로그 파일에 저장할 수 있습니다. 이 PowerShell 스크립트를 사용하여 텍스트 파일에 출력을 저장합니다.

$Outfile = "C:\Logs\Deleted-file-history-log.txt"
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach {
$event = [xml]$_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$File = $event.Event.EventData.Data[6]."#text"
$User = $event.Event.EventData.Data[1]."#text"
$strLog = $Computer + " " + $File + " " + $Time + " " +  $User
$strLog  | out-file $Outfile –append
}
}

감사 정책을 사용하여 Windows Server에서 누가 파일을 삭제했는지 감지하는 방법은 무엇입니까?

그래서 공유 네트워크 폴더에서 삭제된 파일에 대한 정보를 감사하고 저장하기 위한 아이디어와 시스템의 일반 모델을 제안했습니다. 필요한 경우 요구 사항에 맞게 쉽게 수정할 수 있습니다.