Pusat Keamanan Kaspersky - Level Baru

Di Habr sudah ada beberapa catatan tentang otomatisasi Kaspersky Security Center (KSC)


Di sini dan di sini


Hari ini, saya sarankan menyelam sedikit lebih dalam dan pindah ke tingkat yang baru. Gunakan: KSC Open API untuk Kaspersky Security Center 10+.


Untuk memantau status, distribusi workstation baru ke dalam grup, saya harus menggunakan Management Console untuk menghasilkan laporan, ia memiliki fungsionalitas yang luas, tetapi kecepatan kerjanya jauh dari yang diinginkan.


Dan kemunculan dukungan untuk Open API seperti menghirup udara segar, dan segera diputuskan untuk menggunakan solusi ini, dan seperti biasa, perpustakaan ditulis dalam bahasa pemrograman favorit Go yang memungkinkan akses ke server KSC menggunakan API yang disediakannya.


Untuk menggunakan paket dalam proyek kami, seperti biasa, kami perlu mendapatkannya:


go get -u github.com/pixfid/go-ksc/kaspersky


Impor paket ke proyek yang dibuat.


import (
    "github.com/pixfid/go-ksc/kaspersky"
)

Kami membuat klien baru untuk bekerja dengan server KSC


func main() {
    ctx := context.Background()
        cfg := kaspersky.Config { //    
              Username: "login",
              Password: "password",
              Server: fmt.Sprintf(`https://%s:%s`, "ip", "port"),
        }

    client := kaspersky.New(cfg) //  
    client.KSCAuth(ctx) //
}

Otorisasi sederhana, POSTpermintaan titik akhir /api/v1.0/login, dengan pengaturan header permintaan:


Authorization: KSCBasic user=base64(login),pass=base64(pass)
X-KSC-VServer: x
Content-Length:2


Jika berhasil, server akan kembali: {}


, , accessor , requestId .


:


\ , , github.


:


func GetAllGroups(ctx context.Context, client *kaspersky.Client) *FullGroupsInfos {
    groups := &FullGroupsInfos{} //    .

    groupParam := kaspersky.HGParams{
        WstrFilter: `
        (&
            (!"KLGRP_CHLDHST_CNT" = 0)
            (!"grp_from_unassigned" = true)
        )`,
        VecFieldsToReturn: []string{
            "id",
            "name",
            "grp_full_name",
            "creationDate",
            "KLGRP_CHLDHST_CNT",
            "KLSRV_HSTSTAT_CRITICAL",
            "KLSRV_HSTSTAT_WARNING",
        },
        PParams: kaspersky.PParams{
            KlsrvhSlaveRecDepth:    0,
            KlgrpFindFromCurVsOnly: true,
        },
        LMaxLifeTime: 100,
    }

    accessor, _, _ := client.HostGroup.FindGroups(ctx, groupParam) //  
    count, _, _ := client.ChunkAccessor.GetItemsCount(ctx, accessor.StrAccessor) //     

    _, _ = client.ChunkAccessor.GetItemsChunk(ctx, kaspersky.ItemsChunkParams{
        StrAccessor: accessor.StrAccessor,
        NStart:      0,
        NCount:      count.Int,
    } , groups) //    
    client.ChunkAccessor.Release(ctx, accessor.StrAccessor) // 

    return groups
}

, API []byte, inteface{} .


:


{
  "pChunk" : {
    "KLCSP_ITERATOR_ARRAY" : [
      {
        "type" : "params",
        "value" : {
          "KLGRP_CHLDHST_CNT" : 1,
          "creationDate" : {
            "type" : "datetime",
            "value" : "2020-03-13T18:48:43Z"
          },
          "grp_full_name" : " /Broken/",
          "id" : 160,
          "name" : "Broken"
        }
      }
    ]
  },
  "PxgRetVal" : 1
}

:


ts, _, _ := client.Tasks.GetAllTasksOfHost(ctx, "domain.name", "d7f6c44c-6743-416d-81b3-343e464f1ec9")

d7f6c44c-6743-416d-81b3-343e464f1ec9 , KSC


:
{ "PxgRetVal": ["101", "117", "118", "192"] }


(, , ) .


func (ts *Tasks) SuspendTask(ctx context.Context, strTask string) ([]byte, error)
func (ts *Tasks) ResumeTask(ctx context.Context, strTask string) ([]byte, error)
func (ts *Tasks) RunTask(ctx context.Context, strTask string) ([]byte, error)
func (ts *Tasks) DeleteTask(ctx context.Context, strTask string) ([]byte, error)



API, KSC 10, KSC 12.


GitHub


.
C.


All Articles