Un dels problemes que actualment tenim en l'execució de processos en lots és la necessitat de posar la contrasenya en text pla per realitzar diferents accions.
Aquest programari vol donar una solució al problema realitzant una ofuscació amb l'encriptació / desencriptació de les dades confidencials i substituint uns paràmetres establerts pel seu valor real al moment de realitzar la seva execució.
S'ha de diferenciar clarament els conceptes de ofuscació i permisos d'execució dels paràmetres utilizats per un programari en la seva execució:
El programari comandamentsSecuritat podrà realitzar l'ofuscació de de variables d'usuaris / contrasenyes / dades confidencials que s'han de substituir en el moment de realitzar l'execució d'un programa.
Només qui tingui permisos per executar el programa, ho podrà executar i realitzar la substitució dels paràmetres encriptats.
Quedarà afectat a la seguretat del sistema els permisos concedits a l'arxiu de configuració, si no es disposen de permisos per llegir el contingut de l'arxiu, no es podrà accedir als valors de les variables encriptades.
Un exemple d'aquesta problemàtica seria:
sqlplus system/contrasenya_system@instancia_oracle @script_executar
En aquest cas, podem veure la contrasenya en text pla i això pot posar en risc el servidor de base de dades.
Per evitar-ho podem utilitzar aquest programari i, com a exemple, transformar la crida a:
pyExecutaCmd sistemes oracle administrador sqlplus %usuari%/%contrasenya%@%instancia% @script_executar
El programa substituirà els valors de les variables %usuari%, %contrasenya% i %instancia% pels valors reals especificats en un arxiu de configuració encriptat en el moment de la seva execució.
En aquest exemple, per la creació de l'arxiu de configuració amb els paràmetres necessaris per l'execució, procedirem a executar:
pyGeneraEntrada -s sistemes -g oracle -e administrador -a sqlplus usuari=system contrasenya:contrasenya_system instancia:instancia_oracle
-s sistemes: organitza l'entrada a comandaments de sistemes, com a exemple.
-g oracle: organitza l'entrada de sistemes al grup d'oracle, com a exemple.
-e administrador: organitzat en sistemes, grup d'oracle i l'entrada correspon a l'administrador, com a exemple.
-a sqlplus: indica que només el programari SQLPLUS pot realitzar aquesta crida, qualsevol altre no tindrà permís.
Definició de les variables de substitució de l'exemple:
usuari. Usuari de la connexió; com s'ha especificat com usuari=system el valor system no va encriptat, però també es pot especificar com usuari:system, en aquest cas, el valor system s'encriptarà.
contrasenya. Contrasenya de la connexió, també es pot especificar com contrasenya=contrasenya_system, no recomenable per ser una dada confidencial.
instancia. Instància oracle de la connexió, també es pot especificar com instancia=instancia_oracle si no requereix encriptació.
L'arxiu de configuració de l'exemple s'haurà guardat de la següent manera::
[configuracio]
[sistemes]
[[oracle]]
[[[administrador]]]
autoritzats = {CRYPT}xxxxx:{CRYPT}xxxxx,
usuari = system
contrasenya = {CRYPT}xxxxx
instancia = {CRYPT}xxxxx``
Els components del programari que formen part d'aquest servei està dividit en dos parts:
Programes que generen encriptació, aquests programes s'han de guardar en lloc segur i només utilitzar per generar entrades:
Programes que desencripten una entrada executar, aquests programes s'han d'instal·lar en els servidors que en fan ús:
Les opcions disponibles per cadascú del programari s'especifica a continuació.
usage: pyGeneraEntrada.py: {opcions} {[variable=valor] | [variable:valor] | ...}.
Procés per encriptar els valors de variables a l'arxiu de configuració de manera organitzada a nivell de servei, grup i entrada.
arguments:
-arguments Arguments de configuració. Es pot especificar variable=valor [variable:valor] [variable=valor].
L'assignació amb ':' es per guardar el valor encriptat en l'arxiu de configuració.
arguments opcionals:
-h, --help show this help message and exit
-c CONFIGURACIO, --configuracio CONFIGURACIO
Arxiu amb el contingut de la configuració.
-s SERVEI, --servei SERVEI
Servei de provisió de contrasenyes, correspon a una agrupació funcional per gestionar els valors a encriptar.
-g GRUP, --grup GRUP Grup de contrasenyes d'un mateix servei, correspon a una agrupació funcional per gestionar els valors a encriptar.
-e ENTRADA, --entrada ENTRADA
Entrada dins del servei i grup especificat, correspon a una agrupació funcional per gestionar els valors a encriptar.
-k CLAUS, --claus CLAUS
Llista de paraules claus autoritzades a realitzar una petició.
-a AUTORITZATS, --autoritzats AUTORITZATS
llista del programari autoritzat a realitzar una petició.
-b SCRIPTS, --scripts SCRIPTS
Llista dels script autoritzat a executar amb el programari.
-r REFERENCIES, --referencies REFERENCIES
Llista de referencies a script autoritzat a executar el programari.
-u USUARI, --usuari USUARI
Identificació de l'usuari.
-p CONTRASENYA, --contrasenya CONTRASENYA
Contrasenya de l'usuari.
-d, --depuracio Executa el programari en mode depuració.
-l LOG, --log LOG Arxiu on guardar el registre de log del programa.
-v, --versio Retorna la versió del programari.
usage: pyEncripta.py: {opcions} [valor a encriptar] {| [valor a encriptar] | [valor a encriptar]}.
Procés per retorna el valor encriptat dels arguments especificats.
arguments:
-arguments Llista de valors a encriptar. valor {[valor] | [valor]}.
arguments opcionals:
-h, --help show this help message and exit
-p, --programari Activa l'opció per especificar que els arguments correspon
a un programari: autoritzat, script o referència.
-v, --versio Retorna la versió del programari.
usage: pyValidaEncriptacio.py: {opcions} [valor valor_encriptat] {| [valor valor_encriptat] | [valor valor_encriptat]}.
Validació sobre la relació entre una cadena en text i una cadena encriptada o entre dos cadenes encriptades.
arguments:
-arguments Llista de valors a comprovar. {[valor valor_encriptat] | [valor valor_encriptat]}.
arguments opcionals:
-h, --help show this help message and exit
-k, --publica Activa l'opció per especificar que els arguments correspon a la clau publica a encriptar per publicar com a variable d'entorn.
-d, --depuracio Executa el programari en mode depuració.
-l LOG, --log LOG Arxiu on guardar el registre de log del programa.
-v, --versio Retorna la versió del programari.
usage: pyMissatgesError: codi_error. Retorna el missatge associat al codi d'error.
arguments:
-arguments Codi d'error a visualitzar el missatge associat.
usage: pyRetornaEntrada.py: [servei] [grup] [entrada] [autoritzat] [variable].
Procés per retornar el valor d'una variable d'un programa. Opcionalment pot tornar l'usuari amb el paràmetre -u o la contrasenya amb l'opció -p
arguments:
-arguments Variable a retornar el seu valor. Opcional, també es pot especificar la variable 'usuari' o la variable 'contrasenya' o utilitzar l'opció especifica
arguments opcionals:
-h, --help show this help message and exit
-c CONFIGURACIO, --configuracio CONFIGURACIO
Arxiu amb el contingut de la configuració.
-s SERVEI, --servei SERVEI
Servei de provisió de contrasenyes, correspon a una agrupació funcional per gestionar els valors a encriptar.
-g GRUP, --grup GRUP Grup de contrasenyes d'un mateix servei, correspon a una agrupació funcional per gestionar els valors a encriptar.
-e ENTRADA, --entrada ENTRADA
Entrada dins del servei i grup especificat, correspon a una agrupació funcional per gestionar els valors a encriptar.
-k CLAU, --clau CLAU Paraula clau autoritzada a realitzar la petició.
-u, --usuari Indicador per retorna la idendificació de l'usuari.
-p, --contrasenya Indicador per retorna el contingut de la contrasenya de l'usuari.
-d, --depuracio Executa el programari en mode depuració.
-l LOG, --log LOG Arxiu on guardar el registre de log del programa.
-v, --versio Retorna la versió del programari.
usage: pyExecutaCmd.py: {opcions}.
Procés per executar un programari configurat on s'ha especificat aquells unes variables que s'han de substituir pel seu valor real.
arguments:
-arguments Arguments per l'execució del programari especificat.
arguments opcionals:
-h, --help show this help message and exit
-c CONFIGURACIO, --configuracio CONFIGURACIO
Arxiu amb el contingut de la configuració.
-s SERVEI, --servei SERVEI
Servei de provisió de contrasenyes, correspon a una agrupació funcional per gestionar els valors a encriptar.
-g GRUP, --grup GRUP Grup de contrasenyes d'un mateix servei, correspon a una agrupació funcional per gestionar els valors a encriptar.
-e ENTRADA, --entrada ENTRADA
Entrada dins del servei i grup especificat, correspon a una agrupació funcional per gestionar els valors a encriptar.
-k CLAU, --clau CLAU Paraula clau autoritzada a realitzar la petició.
-i INDICADOR, --indicador INDICADOR
Indicador de variable. S'especifica a l'inici i al final
-d, --depuracio Executa el programari en mode depuració.
-l LOG, --log LOG Arxiu on guardar el registre de log del programa.
-v, --versio Retorna la versió del programari.
Actualitza les empremtes de programari autoritzat, scrips o referències.
arguments:
-arguments Arguments de configuració.
arguments opcionals:
-h, --help show this help message and exit
-c CONFIGURACIO, --configuracio CONFIGURACIO
Arxiu amb el contingut de la configuració.
-s SERVEI, --servei SERVEI
Servei de provisió de contrasenyes, correspon a una agrupació funcional per gestionar els valors a encriptar.
-g GRUP, --grup GRUP Grup de contrasenyes d'un mateix servei, correspon a una agrupació funcional per gestionar els valors a encriptar.
-e ENTRADA, --entrada ENTRADA
Entrada dins del servei i grup especificat, correspon a una agrupació funcional per gestionar els valors a encriptar.
-a AUTORITZATS, --autoritzats AUTORITZATS
Llista del programari autoritzat a realitzar una petició.
-b SCRIPTS, --scripts SCRIPTS
Llista dels scripts autoritzat a ser executats amb el programari.
-r REFERENCIES, --referencies REFERENCIES
Llista de referencies a script autoritzat a executar el programari.
-d, --depuracio Executa el programari en mode depuració.
-l LOG, --log LOG Arxiu on guardar el registre de log del programa.
-v, --versio Retorna la versió del programari.
Actualitza les claus utilitzades per encriptar la informació.
arguments:
-arguments Arguments de configuració.
arguments opcionals:
-h, --help show this help message and exit
-c CONFIGURACIO, --configuracio CONFIGURACIO
Arxiu amb el contingut de la configuració.
-k PRIVADA_ANTERIOR, --privada_anterior PRIVADA_ANTERIOR
Clau del programari utilitzat fins ara. Si no està especificada, s'utilitza l'actual
-p PRIVADA_NOVA, --privada_nova PRIVADA_NOVA
Nova clau del programari utilitzat a partir d'ara. Si no està especificada, s'utilitza l'actual
-a PUBLICA_ANTERIOR, --publica_anterior PUBLICA_ANTERIOR
Clau en la variable d'entorn COMANDAMENT_SECURITZAT utilitzat fins ara. Si no està especificada, s'utilitza l'actual
-n PUBLICA_NOVA, --publica_nova PUBLICA_NOVA
Nova clau en la variable d'entorn COMANDAMENT_SECURITZAT per utilitzat a partir d'ara. Si no està especificada, s'utilitza l'actual
-d, --depuracio Executa el programari en mode depuració.
-l LOG, --log LOG Arxiu on guardar el registre de log del programa.
-v, --versio Retorna la versió del programari.
Per gestionar la seguretat d'execució o accés a una variable encriptada, s'han establerts els següents elements:
La combinació dels diferents elements donen seguretat i rigidesa al sistema:
arxiu de configuració. Es l'opció més bàsica on el sistema operatiu dona permisos per accedir i llegir el contingut de l'arxiu de configuració.
-rw-r----- 1 admin adm 3992 jun 28 13:39 comandaments.ini
En aquest exemple, només l'usuari *admin* o els components del grup *adm* podran realitzar l'execució de les diferents opcions del programari comandamentSecuritats utilitzant l'arxiu de configuració *comandaments.ini*.
Aquest arxiu de configuració conté una empremta perquè no es pugui manipular, la modificació del contingut manualment invalidarà l'arxiu i el programari no l'utilitzarà.
Clau amb l'arxiu de configuració. S'han de combinar per ofuscar per una part i donar seguretat al contingut.
Execució del comandament:
pyRetornaEntrada -c comandament.ini -p servei grup entrada clauAcces
La seguretat bé donada pels permisos de l'arxiu comandament.ini.
Per accedir a la contrasenya, es requereix saber la clau d'accés: clauAcces
Generació del comandament:
python pyGeneraEntrada.py -c comandament.ini -s servei -g grup -e entrada -k clauAcces -u anonymous -p prova
Clau, referencia i l'arxiu de configuració. S'han de combinar per ofuscar i donar més seguretat a l'execució.
Execució del comandament:
script: exemple.sh::
1 2 3 | |
Una part de la seguretat bé donada pels permisos de l'arxiu comandament.ini.
Per accedir a la contrasenya, es requereix saber la clau d'accés: clauAcces.
Només el script referenciat: exemple.sh, podrà executar el comandament:
pyRetornaEntrada -c comandament.ini -p servei grup entrada clauAcces`, tot i ser publica la clau d'acces: *clauAcces*
Els permisos d'execució de exemple.sh estaran gestionats pel sistema operatiu.
Generació del comandament:
python pyGeneraEntrada.py -c comandament.ini -s servei -g grup -e entrada -k clauAcces -r exemple.sh -u anonymous -p prova
Autorització i arxiu de configuraci. Només les aplicacions autoritzades disposen de permisos per accedir a les dades encriptades, l'execució serà depenent dels permisos de l'aplicació.
Execució del comandament:
pyExecutaCmd -c comandaments.ini administracio xdrp windows xfreerdp /admin /clipboard /v:%servidor% /u:%usuari% /p:%contrasenya% /size:1400x1024 /drive:home,/home/my_home
Una part de la seguretat bé donada pels permisos de l'arxiu comandament.ini.
Només el programari autoritzat: xfreerdp, podrà subsituir les variables especificades: %servidor%, %usuari%, %contrasenya%*, en el moment de la seva execució.
Generació del comandament:
python pyGeneraEntrada.py -c comandament.ini -s administracio -g xdrp -e windows -a xfreerdp servidor:servidor_windows.com usuari:usuari_administrador contrasenya:contrasenya_administrador
Autorització, referències i arxiu de configuració: Només les aplicacions autoritzades, executades des del programari referenciat, disposen de permisos per accedir a les dades encriptades, l'execució serà depenent dels permisos de l'aplicació de referència.
Execució del comandament:
script: exemple.sh::
1 2 3 | |
Una part de la seguretat bé donada pels permisos de l'arxiu comandament.ini.
Es podrà executar el programari autoritzat: xfreerdp.
Podrà accedir a les dades encriptades quan sigui executat el script: exemple.sh, on es substituirà les variables especificades: %servidor%, %usuari%, %contrasenya%*, en el moment de la seva execució.
Els permisos d'execució de exemple.sh estaran gestionats pel sistema operatiu.
Generació del comandament:
python pyGeneraEntrada.py -c comandament.ini -s sistemes -g xdrp -e windows -a xfreerdp -r exemple.sh servidor:servidor_windows.com usuari:usuari_administrador contrasenya:contrasenya_administrador
Scripts, autorització i arxiu de configuració. Només els scripts amb les aplicacions autoritzades disposen de permisos per accedir a les dades encriptades, l'execució serà depenent dels permisos del script.
Execució del comandament:
script: exemple_1.py::
1 2 3 4 5 6 7 8 | |
Una part de la seguretat bé donada pels permisos de l'arxiu comandament.ini.
Només es podrà executar els programaris python3 o python.
L'accés a les dades encriptades només les podrà realitzar el script: exemple_1.py.
L'execució del script vindrà definida pels permisos del sistema operatiu sobre l'arxiu.
Generació del comandament:
python pyGeneraEntrada.py -c comandament.ini -s scripts -g python -e proves -a python,python3 -s exemple_1.py argument:prova
Scripts, autorització, referències i arxiu de configuració. Només els scripts amb les aplicacions autoritzades, executades des del programari referenciat, disposen de permisos per accedir a les dades encriptades, l'execució serà depenent dels permisos de l'aplicació de referència.
Execució del comandament:
script: exemple_1.py::
1 2 3 4 5 6 | |
script: exemple.sh::
1 2 3 | |
./exemple.sh
Una part de la seguretat bé donada pels permisos de l'arxiu comandament.ini.
Només es podrà executar els programaris python3 o python.
L'accés a les dades encriptades només les podrà realitzar el script: exemple_1.py sempre i quan sigui executat pel procés exemple_1.sh.
L'execució del script exemple.sh vindrà definida pels permisos del sistema operatiu sobre l'arxiu.
Generació del comandament:
python pyGeneraEntrada.py -c comandament.ini -s scripts -g python -e complexa -a python,python3 -s exemple_1.py -r exemple.sh argument:prova
Per salvaguardar el contingut de l'arxiu de configuració, es genera una emprempta amb la informació continguda.
Al carregar l'arxiu de configuració es comprova que l'empremta sigui la vàlida per poder utilitzar-lo.
Tant els programes autoritzats, els scripts o les referències es guarda una emprempta que després validar que no hi hagi cap modificació.
Es per aquest últim motiu que si es modifica o actualitza qualsevol programari, script o referencia, s'ha de regenerar l'empremta. Per això es pot utilitzar el programari pyActualitzaEmpremtes.py, per regenerar l'empreta.
Per poder organitzar les diferents entrades per guardar les variables encriptades, es defineixen tres nivells d'organització, aquests són:
Per cada entrada es poden definir els següents elements de seguretat:
Claus d'accés. Es poden definir diferents claus per accedir a una entrada; o també un número que correspondrà al codi d'un procés on el nom haurà de coincidir amb la clau.
Un exemple seria: >sqlplus `pyRetornaEntrada servei grup entrada`....
- Autoritzats. Aplicacions que poden accedir a una entrada, per validar aquesta aplicació, al generar l'entrada es calcula un empremta que haurà de coincidir al moment d'executar.
Com l'exemple anterior seria >pyExecutaCmd.py sistemes oracle administrador sqlplus %usuari%/%contrasenya%@%instancia% @script_executar
on el programa, en el cas d'estar autoritzat el comandament sqlplus, traduirà les variable especificades.
Cada aplicació autoritzada es guarda en parelles, el primer element es el programari amb la ruta d'execució i el segon element és l'empremta del programari.
Variables. Es podran definir un nombre indefinit de variables de diferents tipus, numeros, cadenes de caracters i llistes.
Valors. Correspon al valor assignat a cada variable, aquest pot estar encriptat o en text pla. Els valors encriptats s'iniciarà amb la cadena '{CRYPT}'
En el moment de definir una variable es podrà realitzar de les següents formes:
- variable=valor. En aquest cas el contingut es guarda sense encriptar.
- variable:valor. En aquest cas el contingut es guarda encriptat.
- variable={CRYPT}xxxxx. En aquest cas el contingut es igual com tal qual donat que ja està encriptat.
- variable:{CRYPT}xxxxx. En aquest cas el contingut es igual com tal qual donat que ja està encriptat.
Per disposar integritat de l'arxiu de configuració, aquest guarda una empremta dels elements definits, validats pel programa al moment de realitzar qualsevol acció.
En el cas que l'empremta no sigui vàlida, el programari no s'executarà i retornarà un codi d'error.
Per la distribució del programari es procedirà a la generació d'un volum encriptat on contindrà el codi font i serà la base per distribuir i compilar en cada màquina a fi de generar els executables.
Aquest arxiu es guarda al directori distribució i es genera a través del script generaVolumDistribucio.sh.
El volum generat té el nom de distribucio.dump i ha de formar part del control de versions.
El procés executat pel script és el següent::
La distribució del programa s'hauria de realitzar havent compilat els diferents programaris; per protegir adequadament, per una part el propi programari i per un altra banda l'arxiu de configuració.
Per realitzar aquesta tasca, s'ha incorporat el comandament generaExecutables.sh.