Kaspersky Security Center - Nouveau niveau

Sur Habr, il y avait déjà quelques notes sur l'automatisation de Kaspersky Security Center (KSC)


Ici et ici


Aujourd'hui, je suggère de plonger un peu plus profondément et de passer à un nouveau niveau.Utilisation: KSC Open API pour Kaspersky Security Center 10+.


Pour surveiller l'état, la répartition des nouveaux postes de travail par groupes, il fallait utiliser la console de gestion pour générer des rapports, elle a des fonctionnalités étendues, mais la rapidité de son travail laisse beaucoup à désirer.


Et l'apparition de la prise en charge de l'API ouverte était comme une bouffée d'air frais, et immédiatement il a été décidé d'utiliser cette solution, et comme d'habitude, une bibliothèque a été écrite dans le langage de programmation préféré de Go qui permettait d'accéder au serveur KSC en utilisant l'API qu'elle fournissait.


Pour utiliser le package dans notre projet, comme d'habitude, nous devons l'obtenir:


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


Importez le package dans le projet créé.


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

Nous créons un nouveau client pour travailler avec le serveur 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) //
}

L'autorisation est simple, POSTune demande de noeud final /api/v1.0/login, avec la définition d'en-têtes de demande:


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


En cas de succès, le serveur renverra: {}


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