Kaspersky Security Center - Nuevo nivel

En Habr ya había un par de notas sobre la automatización de Kaspersky Security Center (KSC)


Aqui y aqui


Hoy, sugiero bucear un poco más profundo y pasar a un nuevo nivel Uso: KSC Open API para Kaspersky Security Center 10+.


Para monitorear el estado, la distribución de nuevas estaciones de trabajo por grupos, fue necesario usar la Consola de administración para generar informes, tiene una amplia funcionalidad, pero la velocidad de su trabajo deja mucho que desear.


Y la aparición de soporte para Open API fue como un soplo de aire fresco, e inmediatamente se decidió usar esta solución, y como de costumbre, se escribió una biblioteca en el lenguaje de programación favorito de Go que permitía el acceso al servidor KSC utilizando la API que proporcionaba.


Para usar el paquete en nuestro proyecto, como de costumbre, necesitamos obtenerlo:


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


Importe el paquete al proyecto creado.


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

Creamos un nuevo cliente para trabajar con el servidor 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) //
}

La autorización es simple, POSTuna solicitud de punto final /api/v1.0/login, con la configuración de encabezados de solicitud:


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


Si tiene éxito, el servidor devolverá: {}


, , 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