Archive for the ‘autorización’ Category

Seguridad en la ejecución de programas

Friday, June 5th, 2009

A la hora de asegurar la ejecución de actividades sobre el sistema SAP habitualmente nos acordamos de restringir el acceso a determinadas transacciones, objetos de autorización, etc.

Pero muchas veces, por necesidades incorrectamente satisfechas al momento de la implementación, o por un apresurado mantenimiento del código, entre otras posibilidades, quedan puertas abiertas que podrían permitir la ejecución de actividades no deseadas en el sistema.

Personalmente, pienso que muchas de estos permisos se dan por inconsciencia, o desconocimiento de lo que se está autorizando por parte de los dueños o responsables de los datos. Ya que ellos conocen la información que quieren restringir, pero no conocen los medios por los que se puede acceder a la misma. Cuantas veces uno habrá escuchado: “Los sueldos solo los pueden ver un grupo reducido de personas”, y por otro lado se entregan los permisos de visualización de tablas indiscriminados, el debug con modificación de variables, la ejecución libre de programas, entre tantos otros.

Hablando de estas posibilidades, una de ellas es la de permitir la ejecución directa de programas en el ambiente de producción. Para muchos puede sonar a una atrocidad, pero otros probablemente digan que ven esa posibilidad habitualmente habilitada en su sistema.

Principalmente estamos hablando de las transacciones SA38 y SE38.

A veces encontramos que los programadores pueden acceder a producción con estos permisos, otras veces los parametrizadores, e incluso otras veces hasta los usuarios finales, con el inocente fin de poder “Ejecutar un reporte”.

El primer tema a plantear a la hora de resolver estos inconvenientes es el de que todo desarrollo para ser ejecutado en un ambiente productivo debería tener asignado un código de transacción. Como adminsitradores de seguridad deberíamos exigir el cumplimiento de esto, más siendo que la tarea de utilizar la transacción SE93 para crear un código no demanda más de 1 minuto. De esta manera podríamos restringir la ejecución de cualquier programa como si una transacción estándar se tratara.

Ahora el segundo caso es cuando no podemos lograr esto, ya se por falta peso de nuestro sector, o porque las necesidades organizacionales son otras (casos puntuales, ejecución de programas estándar, pedidos ridículos pero con suficiente peso, etc). Ante esta situación lo ideal es no brindar permisos excesivos.

La ejecución de programas está restringida por el objeto S_PROGRAM, el cual tiene un “grupo de autorización de programas” y un código de acción posible (SUBMIT – Ejecutar un programa, BTCSUBMIT – Ejecutar como proceso de fondo, VARIANT – Ejecutar con una variante)

Lo primordial es la utilización de este grupo de autorizaciones, el cual puede definirse en la misma transacción SE38 a la hora de crear el programa. Pero hay que tener en cuenta que un número importante de programas estándar de SAP NO TIENEN GRUPO DE AUTORIZACION ASIGNADO, permitiendo así la ejecución de los mismos con sin chequear el campo de grupo. En este caso existe un programa estándar que permite el mantenimiento masivo de los grupos de autorización llamado SREPOAUTH.

También hay que tener en cuenta que los programas pueden ser ejecutados como proceso de fondo (de no tener las transacciones SA38/SE38) con las transacciones SM36/SM37, las cuales también hay que prever, sobre todo para quienes tienen permisos para la ejecución de procesos de fondo.

De esta manera tenemos bastante herramientas para restringir la ejecución de programas ante distintas circunstancias que se nos planten, en el trabajo cotidiano.

VN:F [1.9.10_1130]
Rating: 4.6/5 (5 votes cast)
VN:F [1.9.10_1130]
Rating: 0 (from 2 votes)

Creación de un rol – ejemplo

Thursday, April 23rd, 2009

La idea en este post es entender un proceso simple de creación de un rol,  cómo asignar una transacción a un usuario, los objetos de autorización correspondientes, etc.

Para hacer esto vamos a crear un ejemplo simple en donde vamos a crear un rol con permisos para administrar usuarios en SAP R/3.

1- Lo primero… Darle un nombre, los nombres de todos lo objetos personalizados o creados por el usuario final en SAP comienzan con la letra Z de manera estándar, la realidad es que podemos utilizar cualquier letra pero agrupar todo tras la Z es una buena manera de identificar los roles propios en caso de tener que realizar un upgrade o por cualquier motivo diferenciarlos del resto, por eso en nuestro caso el rol se llamará Z:PRUEBA (podría haber sido por ejemplo ZUSERS o Z_ABM_USUARIOS, etc). Hacemos click en el botón de Rol Simple y pasamos a la siguiente pantalla:

image

2- Una vez en la próxima ventana podemos asignar una descripción al rol y proseguir a la pestaña de “Menú”, en donde haciendo click en el botón “Transacción” incorporaremos una transacción al Rol y por consiguiente a su menú:

image

3- Una vez hecho el click nos disponemos a escribir el nombre de la transacción que queremos incorporar, también podemos hacer esto desde las opciones de Tomar Menús las cuales incorporaran las transacciones desde los menús estándar de SAP, utilizando su estructura predefinida, pero eso se los dejo para que experimenten ustedes.

image

4- Una vez incorporada la transacción al menú podemos ir a la pestaña de autorizaciones:

image

5- Una vez en el menú de autorizaciones hacemos click en Modificar Autorizaciones, y accederemos a una nueva pantalla, nos preguntará si queremos grabar el rol, esta acción es necesaria para poder tratar los objetos de autorización del mismo con lo cual contestaremos que si. La otra alternativa sería utilizar el “diskette” que se encuentra en la barra superior para grabar nuestro trabaja hasta el momento.

image

6- Una vez estemos en la nueva pantalla (a veces demora),  podemos ver los objetos de autorización agrupados por tipo de objeto.

image

7- Una vez que hacemos click en el símbolo [+] podemos ver el nombre del objeto de autorización (en este caso el primero es S_TCODE) y una breve descripción del mismo. Haciendo otra vez click en el [+] podemos ver los campos y sus valores. En este caso vemos el campo TCD y el valor SU01 que es la transacción que anteriormente agregamos en el menú y con la que automáticamente SAP carga el objeto. Resumiendo las transacciones que agregamos en el menú automáticamente son incluidas dentro de los valores del objeto S_TCODE.

image

8-Debajo de este objeto podemos encontrar 3 grupos más con sus respectivos objetos. Estos objetos de autorización son los que la transacción SU01 verifica en tiempo de ejecución (son los definidos en la transacción SU24, puede que existan más o menos chequeos que los aquí establecidos).

image

9- Tenemos que definir todos los valores de los objetos de manera de hacerlos acorde a la funcionalidad a otorgar. Por ejemplo si queremos brindar solo la posibilidad de visualizar usuarios deberíamos concentrarnos en los objetos S_ADDRESS1 (poder visualizar datos de dirección del usuario) y S_USER_GRP (permisos por grupo de usuarios) definiéndolos con la actividad 03 (visualizar) y la definición del grupo correspondiente o “*” para todos los grupos y el tipo de dirección Bc01.

image

10- Una vez realizadas todas las modificaciones se deben grabar las modificaciones (icono de diskette en la barra superior) y generar los perfiles de autorización correspondientes (ícono generar al lado del tacho de basura)

image image

11- Los otros objetos de autorización no brindan permisos adicionales en el caso de solo querer visualizar los datos de un usuario, pueden hacer la prueba y efectivamente van a ser capaces de usar la transacción SU01, pero hay funcionalidades adicionales que solo pueden ser brindados por estos otros, por ejemplo ver los permisos del usuario (roles) con los objetos S_USER_AGR, S_USER_AUT, S_USER_PRO, etc.

12- Una vez creado el rol puede definirse los usuarios que tendrán asignado el mismo desde dentro de la misma transacción PFCG o el proceso inverso desde la transacción SU01 (ingresando desde el usuario y definiendo los roles para el mismo. Una vez realizada la modificación en la PFCG se debe ejecutar la comparación de usuarios (botón) para que se actualicen efectivamente los permisos en los buffers de usuarios.

image

13- Si fuera el caso de requerir la funcionalidad de bloquear/desbloquear usuarios, por ejemplo, se otorgaría en el mismo objeto S_USER_GRP la actividad 05 y automáticamente una vez generado de nuevo el rol (y en ocasiones una vez que se comparen los roles) el usuario tendría el permiso a realizar esa acción.

El presente actúa a modo de ejemplo y podría tener muchas modificaciones para ser un rol de utilidad, pero la idea es entender como es el proceso de creación de un rol, y que el mismo aplica a roles más complejos y transacciones tanto de Base como de Negocio.

VN:F [1.9.10_1130]
Rating: 4.3/5 (8 votes cast)
VN:F [1.9.10_1130]
Rating: +2 (from 2 votes)

Riesgos: Debug con modificación de variables

Wednesday, March 11th, 2009

Empezamos con un tipo de post nuevo, donde vamos a ir enumerando entrada tras entrada diversos tipos de riesgos a los que podemos estar expuestos en la plataforma SAP y cuando sea posible las formas conocidas de minimiarlos.

En este primer caso vamos a enumerar uno de los más graves que puede ocurrir, y es el que el existan usuarios que en el ambiente productivo posean permisos para realizar debug o depuración, y a su vez el permiso de modificar el valor de las variables (y en las versiones más nuevas como ECC 6.0, ir a una línea de ejecución específica).

¿Qué es el DEBUG?

El debug o depuración es la capacidad de recorrer línea por línea el código fuente ABAP de la transacción que se ejecuta, en el caso de poseer el permiso en la actividad 02, uno puede a su vez modificar los valores de las variables de los programas.

El riesgo de poseer estos permisos es que prácticamente el usuario que lo ejecute puede saltearse todos los controles de autorización, ya que en el momento de  ejecutar una transacción, podría ir paso a paso por el código y cuando sus permisos no le permitieran seguir tras un AUTHORITY-CHECK fallido el podría cambiar ese valor de error, autorizándose a si mismo a continuar.

Un usuario con los permisos adecuado puede acceder al modo debug utilizando en la barra de acceso rápido de SAP el código “/h”.

Este modo de ejecución se permite cuando el usuario posee entre sus roles el permiso al objeto de autorización S_DEVELOP, el cual entre sus campos tiene el valor de ACTVT en 02 (modificar) y el valor de OBJTYPE en “DEBUG“.

Si se da esta condición (sin importar los valores de otros campos, pueden incluso estar vacíos), el usuario puede acceder al modo debug y modificar el valor de las variables.

La manera de evitar este inconveniente es justamente no brindando estos permisos en un ambiente productivo, salvo en un caso excepcional por tiempo limitado y a un usuario específico y nomenclado, para solucionar un error importante en el sistema.

Incluso este tipo de permisos no debiera otorgarse en los ambientes de desarrollo (modificar, el DEBUG común puede realizarse) , ya que también permite vulnerar la seguridad de los mismos y por consiguiente el entorno productivo podría llegar a verse afectado.

Para realizar la búsqueda de quienes tienen permisos para realizar esta acción lo ideal es utilizar la transacción SUIM y buscar los usuarios que posean este objeto de autorización y estos valores de campo.

En un próximo post vamos a hacer una explicación integral del uso de la transacción SUIM (probablemente en más de un post por lo extenso del tema)

VN:F [1.9.10_1130]
Rating: 4.8/5 (4 votes cast)
VN:F [1.9.10_1130]
Rating: 0 (from 0 votes)

Parámetros: Mejores prácticas (parte II)

Tuesday, March 10th, 2009

Siguiendo con el post del día de ayer nos quedaron algunos parámetros para seguir con las recomendaciones de “las mejores prácticas”:

Multiloguin

login/disable_multi_gui_login = Debe estar configurado en uno (1) para minimizar dos riesgos. Primero, que los usuarios no compartan su Id y su contraseña de manera que no sea identificable el responsable de las acciones, y segundo que no pueda loguearse concurrentemente un usuario que obtuvo una contraseña de otro, si el primero ya estaba logueado al sistema (quedando registrado el intento de loguin)

login/multi_login_users = Bajo este parámetro pueden definirse excepciones al caso anterior, pero lo ideal es no hacerlo salvo necesidad explícita y justificada.

login/failed_user_auto_unlock = Esto debe ser (0) para evitar que los usuarios bloqueados se habiliten automáticamente. Como mecanismo de control es importante la participación y control por parte del administrador para desbloquearlo.

login/fails_to_session_end = Si bien no es una medida de seguridad en si misma, permite molestar en los intentos de adivinar una contraseña. Lo ideal sería definirlo al menos en un número menos al valor de login/fails_to_user_lock

login/fails_to_user_lock = Para evitar los multiples intentos de adivinar una contraseña lo ideal es definir este parámetro en (3).

Otros parámetros

login/disable_cpic = Si no son necesarias este tipo de conexiones lo ideal es deshabilitar este tipo de acceso. (1)

login/no_automatic_user_sapstar = Lo ideal es deshabilitarlo (1) deshabilita). Para más información ver el artículo:  http://www.seguridadsap.com/sap/usuarios-por-defecto-sap-ddic-earlywatch-etc/.

rdisp/gui_auto_logout = Es interesante definir este parámetro por cuestiones de performance (sesiones activas) y para evitar que las estaciones de trabajo queden logueadas en ausencia del usuario (en conjunto con las políticas locales de las estaciones). Un valor lógico sería  20 minutos (1200)

login/system_client = Preferentemente podría dejarse que el usuario tenga que especificar el número de mandante como una medida adicional de seguridad para los intentos casuales de acceso.

La lista no trata de ser exhaustiva, y tiene fines didácticos e incluso está abierta a la discusión por parte de ustedes si así lo desean en los comments.

VN:F [1.9.10_1130]
Rating: 3.5/5 (2 votes cast)
VN:F [1.9.10_1130]
Rating: +3 (from 3 votes)

Tips: Transacciones con asignación manual

Wednesday, March 4th, 2009

Es posible en la transacción PFCG agregar transacciones que no están en el menú de usuario de manera manual directamente en los objetos de autorización.

Es importante saber esto al momento de revisar la seguridad configurada en nuestro sistema SAP para no dejar pasar por alto determinados permisos que no aparecen en el menú de usuario, pero si directamente en el objeto de autorización S_TCODE.

Si nosotros ingresamos a modificar los valores de los objetos de autorización dentro de la transacción PFCG e intentamos incorporar un nuevo valor al campo TCD del objeto S_TCODE vamos a ver que SAP no nos lo permite.

El pequeño truco está en ir al botón titulado “Manualmente” e incorporar en el mismo un nuevo objeto de autorización “S_TCODE” de manera que ahora una nueva línea para el campo TCD aparecerá y esta podremos editarla manualmente.

Es interesante notar que si estamos controlando los permisos de los usuarios a través de tablas y chequeamos la tabla AGR_TCODES, estos que incorporemos no van a aparecer ya que la misma solo muestra las transacciones incorporadas a través del menú del Rol o Grupo de Autorización y tendremos que ir a ver especificamente la tabla AGR_1251 y el campo TCD del objeto S_TCODE o ya a más bajo nivel las autorizaciones propiamente dichas (perfiles).

VN:F [1.9.10_1130]
Rating: 4.0/5 (2 votes cast)
VN:F [1.9.10_1130]
Rating: 0 (from 0 votes)

¿Cómo funciona la seguridad en SAP?

Monday, March 2nd, 2009

La seguridad de SAP es algo compleja, eso creo que ya lo dijimos, pero todas las cosas pueden ser complejas hasta que las entendemos. En este post vamos a tratar de lograr eso.

Algunos temas los empezamos a tratar en posts anteriores, pero no el proceso completo que pasamos a relatar.

1- El usuario ingresa en SAP R/3 y se le permite su acceso

2- Se cargan desde el maestro de usuarios los roles que el usuario posee (tabla AGR_USERS), a partir de los mismos se obtienen los perfiles que tienen las autorizaciones para esos roles (AGR_1016). Aunque es altamente probable que el sistema SAP directamente miré la tabla UST04 (usuarios y perfiles). En caso de perfiles compuestos estos se encuentran definidos en la tabla UST10C. A su vez la relación entre autorización y perfiles está en la UST10S, y por último los valores que se le otorgan a los objetos de autorización se encuentran en la tabla UST12 (probablemente SAP internamente utilice algunas otras tablas o no haga un uso de todas estas, pero es interesante repasarlo porque puede ser de utilidad para ustedes).

3-  Esta información recopilada es almacenada en el buffer del usuario, el cual tiene para cada usuario todas las autorizaciones que el mismo posee cuando está logueado en el sistema, esta información puede consultarse para el propio usuario o para otro distinto mediante la transacción SU56 o si se necesita un mayor análisis en la tabla USRBF2 (y vínculos a la tabla UST12).

4- A partir de este momento el usuario ya tiene acceso al sistema y todos sus permisos están cargados. El sistema se encuentra a la espera de una acción por parte del mismo.

5- El usuario decide ejecutar una transacción, por ejemplo la FB02 (modificar documento contable).

6- SAP verifica SIEMPRE que el usuario en su buffer posea el permiso para la transacción. Para esto chequea que el objeto de autorización S_TCODE posea el campo TCD y entre sus valores se encuentre el FB02. Este chequeo no depende de la transacción si no que se ejecuta SIEMPRE que una es llamada.

7- Si se posee el valor FB02 se permite la ejecución del código de la transacción y se procede con el mismo, en caso negativo se rechaza automáticamente la solicitud informándole al usuario.

8- Dependiendo de la transacción a ejecutar, la misma puede chequear como primera instancia (antes de la ejecución del código) que se posea un objeto de autorización con un valor determinado para más de un campo. Este objeto, campos y valores se especifican en la definición de la misma a través de la transacción SE93 o la tabla TSTCA donde también pueden consultarse. Este chequeo actúa igual que el del código de transacción y se realiza previo a la ejecución del programa correspondiente a la transacción. En el caso de la transacción FB02 se chequea el objeto F_BKPF_BUK y la actividad (campo ACTVT) con valor 02 (modificación), el campo Sociedad (BUKRS) en esta instancia, no se verifica ya que el valor de chequeo está en blanco). Cabe destacar que no todas las transacciones realizan este chequeo inicial.

9- A partir de este momento se inicia la ejecución del código.

10- El código ABAP de la transacción se ejecuta hasta que dentro del mismo aparezca la instrucción AUTHORITY_CHECK.

11- A través de esta instrucción el programa verifica que los valores especificados para cada campo en la misma se encuentren en el buffer del usuario que la ejecuta. En caso de tenerlos se permite que se continúe la transacción y en caso de ausencia no se permite continuar o se bloquea el acceso a determinada información. Es a decisión del programador de la transacción en que momento se realiza el chequeo, a veces se verifica cuando uno ingresa un valor (por ejemplo la sociedad en la FB02) en donde se verifica el mismo objeto que antes F_BKPF_BUK, pero pidiendo la actividad 02 (modificar) y la sociedad para la cual va a realizarse la modificación (BUKRS).

NOTA 1: Tengamos que cuenta que los campos de un objeto de autorización siempre se verifican en conjunto, quiero decir que la actividad 02 (modificar) solo autoriza a la Sociedad que se encuentra dentro de la misma autorización. Podría ocurrir que dentro de un mismo rol tengamos permiso para modificar una Sociedad pero solo para Visualizar otra. Por eso es importante tener en cuenta que estas son verificadas “en bloque”

NOTA 2: También es importante destacar que es posible y hasta habitual que un usuario tenga más de un ROL asignado, en este caso se produce lo que se conoce como “suma de autorizaciones” y esto quiere decir que los valores solicitados de objetos de autorización pueden encontrarse en cualquiera de los roles que el usuario tiene asignado. Ejemplo: Si en el rol 1 el usuario tiene el acceso a la transacción FB02 (objeto S_TCODE), y en el objeto F_BKPF_BUK la actividad con valor 03 y la sociedad en 0001, pero el programa solicite 02 y 0001 el usuario no podría ingresar a la transacción. Ahora si agregamos un segundo rol al usuario sin ningún objeto S_TCODE pero con el objeto F_BKPF_BUK con valor de actividad 02 y sociedad 0001 el usuario ahora si va a poder tener acceso a ejecutar esta transacción (el primer rol le da el S_TCODE con FB02 y el segundo el F_BKPF_BUK con actividad 02)

Por último cabe destacar que la transacción FB02 necesita de otros objetos de autorización para ser ejecutada pero el nombrado aquí fue solo a modo de ejemplo. En un próximo post veremos un ejemplo completo.

VN:F [1.9.10_1130]
Rating: 4.8/5 (5 votes cast)
VN:F [1.9.10_1130]
Rating: +2 (from 2 votes)

Usuarios por defecto (SAP*, DDIC, EARLYWATCH, etc)

Wednesday, February 18th, 2009

Hoy vamos a hablar de los usuarios por defecto del sistema SAP. Habitualmente estos usuarios los podemos encontrar no solo en R/3 si no que, en principio, también están presentes en los otros sistemas (BW, PI, Solution Manager, etc)

Estos usuarios existen por diversos motivos, principalmente vinculados con el propio funcionamiento del sistema, la instalación o la configuración del mismo.

DDIC

Podemos encontrar en principio el usuario DDIC, el cual es el utilizado para la gestión del diccionario de datos, modificación de estructuras de datos, upgrades del sistema, etc. Por estos motivos el usuario no debe ser eliminado del sistema si no que por el contrario debe ser modificada su contraseña de origen la cual viene por defecto definida como 19920607, ya que dejar este usuario con la contraseño por defecto nos expondría a riesgos asociados con los permisos amplios del mismo para operar con el sistema.

EARLYWATCH

Este usuario si bien no posee permisos tan amplios como DDIC permite el acceso al sistema con una contraseña por defecto: SUPPORT. Este usuario es utilizado para el proceso de revisión periódica del sistema por parte de SAP, en donde revisa la performance del equipo de manera remota, las licencias, etc a través de un acceso por SAPRouter. Es recomendable cambiar la contraseña de este usuario en el mandante 066 (al que accede SAP para estas evaluaciones)

SAPCPIC

Usuario utilizado para los procesos de comunicación entre sistemas y el cual también posee permisos amplios, la política es similar a la del usuario DDIC y es de cambiar su contraseña por defecto ADMIN

SAP*

Un caso parecido a DDIC, y tal vez el más grave ocurre con el usuario SAP*, el cual es el usuario con el que por primera vez iniciaremos el sistema después de la instalación, y que posee amplios permisos sobre la aplicación. En versiones anteriores a las ECC 5 de SAP la contraseña por defecto era 06071992, pero a partir de la misma se pregunta durante la instalación la contraseña inicial. Este usuario tampoco debe ser eliminado ya que es de utilidad en determinadas ocasiones para aplicaciones de parches, updates, upgrades y algunas tareas en particular que lamentablemente tienen este usuario hardcodeado como el único que puede ejecutarlas.

Borrar el usuario SAP*

Las precauciones con el usuario SAP* deben extremarse ya que en caso de borrarse el usuario de sistema la aplicación tiene un BUG o mecanísmo de seguridad en donde se genera un nuevo usuario SAP* con contraseña por defecto PASS. De esta manera si borramos el usuario SAP* estaremos abriendo un agujero de seguridad aún más grande ya que no podría cambiarse la contraseña por defecto.

La solución a este problema viene dado por un parámetro seteable en la transacción RZ11 de nombre (login/no_automatic_user_sapstar) el cual para no permitir este agujero de seguridad debe estar definido con el valor 1. (Ver artículo sobre parámetros)

Preventivamente es recomendable bloquear al usuario SAP* y desbloquearlo solo en caso de necesidad explícita de uso.

Recomendaciones Finales:

Cualquier usuario creado por defecto por el sistema implica un riesgo, ya que a los mismos se les conocen habitualmente varias vulnerabilidades. Lo primordial: cambiar sus contraseñas por defecto y de ser posible bloquear los usuarios sin borrarlos (caso SAP*). Una buena forma de verificar preventivamente esto es ejecutar desde la transacción SA38 el report RSUSR003, el cual nos brindará la información sobre las contraseñas por defecto de estos usuarios.

VN:F [1.9.10_1130]
Rating: 4.0/5 (1 vote cast)
VN:F [1.9.10_1130]
Rating: 0 (from 0 votes)