SAP

Desbloqueio automático de usuários do SAP

Escrito por Douglas Baiocco. Publicado em SAP.

Por questões de segurança, não é recomendável deixar uma senha ser testada indefinidamente sem bloqueio. Imagine um atacante na sua rede, tentando acessar seu ambiente SAP: o mesmo poderia utilizar um sistema que testaria combinações de usuário e senha e dependendo do tempo de tentativa e da qualidade da lista que ele utilizaria, poderia obter acesso ao SAP.

O SAP tem uma trava contra uma tentativa de login por BRUTE FORCE (o método de tentativa e erro): O usuário é bloqueado após 5 tentativas sem sucesso.

O parâmetro que define isso é este:

login/fails_to_user_lock (valor standard 5)

O unico porém é que após o usuário ser bloqueado, o mesmo precisa ser desbloqueado pelo ADM do SAP. Pode até ser uma política de segurança eficiente, mas como política administrativa é um porre... imagine uma rede com milhares de usuários. Imagine a quantidade de solicitações de desbloqueio que o responsável por isso teria. A profissão dele seria de Desbloqueador Oficial de Usuário.

Se alguém souber de uma solução mais elegante ou com menos gambiarra, estou aberto a sugestões. Vamos lá:

Iremos criar um programa ABAP (se38) com o nome de ZUNLOCK_ALL_USERS, com o segundo conteúdo:

*&---------------------------------------------------------------------*

*& Report  ZUNLOCK_ALL_USERS

*&

*&---------------------------------------------------------------------*

*&

*&

*&---------------------------------------------------------------------*

REPORT  zunlock_all_users.

DATA: t_usr02 TYPE TABLE OF usr02,

t_return TYPE TABLE OF bapiret2.

DATA: wa_usr02 TYPE usr02,

wa_return TYPE bapiret2.

SELECT * FROM usr02 INTO TABLE t_usr02 WHERE uflag = 128.

IF sy-subrc = 0.

  LOOP AT t_usr02 INTO wa_usr02.

    FREE t_return.

    CALL FUNCTION 'BAPI_USER_UNLOCK'

      EXPORTING

        username = wa_usr02-bname

      TABLES

        return   = t_return.

    READ TABLE t_return INTO wa_return WITH KEY type = 'E'.

    IF sy-subrc <> 0.

      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' .

    ENDIF.

  ENDLOOP.

ENDIF.

Note que este programa utiliza uma BAPI para desbloquear os usuários de acordo com o bloqueio por senha (não queremos que um usuário bloqueado pelo ADM seja desbloqueado, certo?)

Após o programa criado, testado e transportado para os devidos locais, é apenas necessário criar um job que irá executá-lo. Aqui criamos com o nome DESBLOQUEAR_ALL_USERS e execução de 5 em 5 minutos.

Pronto. Temos a proteção do usuário bloqueado por tentativas erradas e um job que desbloqueia esses usuários após 5 minutos.

Apenas lembrando que a segurança não é comprometida por que um atacante teria que esperar 5 minutos para realizar uma nova tentativa de acesso por senha. Note que podemos incrementar o programa, aumentando os tempos para tentativas sucessivas e outras coisas... Mas é assunto para um próximo artigo.

Relacionados