Você está na página 1de 16

IBMBluemixDesenvolvananuvememumclique!

Comeceseutrialgratuito

developerWorksBrasil

ItensTcnicos

Softwarelivre

Bibliotecatcnica

SeguranaTotalemumBancodeDadosPostgreSQL
Disponibilidadeparaoprimeiroataque
AseguranadebancodedadosamaiorpreocupaocomosaplicativosbaseadosnaWebdehoje.Semcontrole,
vocarriscaexporinformaessensveissobresuaempresaou,piorainda,sobreseusvaliososclientes.Neste
artigo,aprendasobremedidasdeseguranaquevocpodetomarparaprotegerseubancodedadosPostgreSQL.

RobertBernieranalistadePostgreSQLBusinessIntelligencenaMedioSystems,queldernatecnologiaemergentedepesquisade
mdia.ElefoiumconsultordePostgreSQLparamuitoslderesemsuasrespectivasindstrias,incluindotelefonescelulares,WallStreet,
centrosdepesquisacientfica,contratadosdadefesadosEUA,edepartamentosdeTIdasuniversidadesefaculdadesIvyLeague.Eleum
defensordoPostgreSQLeescreveuparaSysAdmin,Hakin9,PHPSolutions,emuitossitesonlineincluindoLinux.com,PHPbuilder.com,
PHPMagazine,LinuxWeeklyNewseoportaldaWebO'Reilly.ElecontribuiunoslivrosBSDHackseMultimediaHacks.Eletambm
mantmopglive,http://pglive.info,queusadonomundotodoemconferncias,tradeshowsesessesdetreinamentoparafazeroperfil
dosincrveisrecursosdoPostgreSQL.

16/Dez/2009

Introduo
Existemmuitashistriasnaimprensasobrecrackersacessandobancosde
dadoscorporativos.Foramseosdiasquandoadolescenteseramosautores
damaioriadosataquesadados.Hoje,acolheitadedadosumgrande
negcioerealizadoporespecialistasdedicadosquetrabalhamdentrode
umainfraestruturacorporativa.Noumaquestodecomovocpode
evitaratentativadeacessonoautorizadavocnopodemas,em
vezdisso,comovocpodereduziroefeitoquandoeleocorrer.
Esteartigoexploraosdesafiosdeprotegerseuservidordebanco
dedadosPostgreSQL(tambmconhecidocomoPostgres).O
PostgreSQLumpoderososistemadebancodedadosrelacional
deobjetodesoftwarelivre.Eletemumaarquiteturacomprovada
comreputaoparaconfiabilidade,integridadededadose
correo.Eleexecutaemtodososprincipaissistemas
operacionais,incluindoLinux,UNIX,eWindows.Ele
completamentecompatvelcomoACID,etemsuportecompleto
parachavesestrangeiras,junes,visualizaes,acionadorese
procedimentosarmazenados(emvriosidiomas).
Certifiquesedefazerodownloaddaslistasdecdigodeamostra
usadasnesteartigo.

Desenvolvaeimplemente
seuprximoaplicativona
plataformadeclouddo
IBMBluemix.

Comeceseu
trialgratuito

Definies
HackerUmhackerexplora,investigae
descobrepormeiodoentendimentoda
tecnologiaemumnvelraramente
duplicadoemcircunstnciasnormais.Ser
chamadodehackerporseuscolegas
umamedalhadehonranoporquevoc
fazalgumacoisaruim,masporqueseu
conhecimentonotemparalelo.
CrackerUmhackercomminteno,
comovandalismo,fraudeemcartode
crdito,roubodeidentidade,piratariaou
outrostiposdeatividadeilegal.

Oadministradorideal
NagrandetradiodoUNIX,oPostgreSQLfoiprojetadodesdeabaseparacomplementaroS.O.no
qualsesustenta.OtimizaroPostgreSQLparaseupotencialmximorequerconhecimentoalmda
demandatipicamenteesperadadoadministradordebancodedadosmdio(DBAaveragedatabase
administrator).

Resumidamente,oDBAdePostgreSQLidealtemoseguinteconhecimento:
ConhecedordateoriarelacionalefamiliarizadocomoSQL92,99e2003,respectivamente.
Conhececomolercdigodeorigem,preferencialmenteC,epodecompilarcdigodeorigemnoLinux.
PodeadministrarsistemaesesenteconfortvelcomosystemVUNIXouLinux.
Podemanter,senecessrio,osvriositensdehardwaretipicamenteencontradosemumalojadeTI.
EntendeacamadaTCPOS,podecriarumasubredeemumarede,ajustarfirewalls,etc.
MuitosDBAspossuemsomenteashabilidadesparaadministrar,monitorareajustaroprpriobancode
dados.Porm,oPostgreSQLintegradoparatambmcontarcomosutilitriosdoS.O.raroumDBA
quedominetodasessasdisciplinas,masteresseconhecimentopossibilitaaoDBAdoPostgreSQL
realizarmaisemmenostempodoqueseriapossveldeoutraforma.

Revisodosprivilgiosdeacesso
Conheceroqueumafunodebancodedadosfazfundamentalsevocirapreciarpossveisvetores
deataque.Primeiro,vocprecisacontrolaroacessoaosdadosconcedendoerevogandopermisses.

Funes,econcessodedireitoseprivilgios
Oquoseguraumafunocomumcomdireitoseprivilgiospadro?Acontadousuriopodeser
criadacomumdosseguintescomandos:
AinstruoSQLCREATE USER
AinstruoSQLCREATE ROLE
OutilitriodelinhadecomandosPostgrescreateuser
Essestrsmtodosdecriaodecontasdeusuriosecomportamdemaneiradiferente,eresultamem
direitoseprivilgiospadrodrasticamentediferentes.
Paraumafunocomum,ousuriotpicopode:
Acessarqualquerbancodedadosseoclusterdedadosusarapolticadeautenticaopadro
conformedescritoempg_hba.conf.
CriarobjetosnoesquemaPUBLICdequalquerbancodedadosqueousuriopuderacessar.
Criarobjetosdesesso(temporrios)emsessestemporrias,comoschemapg_temp_?
Alterarparmetrosdetempodeexecuo.
Criarfunesdefinidaspelousurio.
ExecutarfunesdefinidaspelousuriocriadasporoutrosusuriosnoesquemaPUBLIC(desdeque
elesinterajamsomentecomobjetosaosquaisousurioobteveprivilgiosconcedidosparaacessar).
importantesaberoqueousuriotempermissoparafazer,masigualmenteimportanteentenderas
atividadesqueousuriocomumnopodefazerporpadro.Usurioscomunsnopodem:
Criarumbancodedadosouumesquema.
Criaroutrosusurios.
Acessarobjetoscriadosporoutrosusurios.
Efetuarlogin(aplicasesomenteinstruoCREATE ROLE).

Direitoseprivilgiosdesuperusurios
Apesardeumusuriocomumnopoderexecutarosdireitoseprivilgiosdefinidoscomorecursosde
superusurio,ousuriocomumaindapodecausarumpoucodesofrimentocomdireitoseprivilgios
padro.
Estaseodiscuteosvetoresdeataquequeousuriocomumpodemanipular.

Acessandoobjetos
UmaprticaextremamentecomumeinseguraocorrequandooPostgreSQLusadocomoobackend
paraumservidordaWeb.Odesenvolvedorcriaousuriocomumdesejandosomenterealizaraqueles
comandosquemanipulamosdadosusandooscomandosINSERT,UPDATE,eDELETE.Porm,aes
noautorizadassopossveisporqueoesquemaPUBLICabertoatodos.Ousuriopode,por
exemplo,fazermineraodedadosnessastabelas.atmesmopossvelmodificlosincluindoregras
eacionadores,salvandodadosemtabelaslocalizadasnoesquemaPUBLIC,quepodementoser
colhidos.
Lembrese,umacontadeusuriocomprometidapodefazerqualquercoisaquedesejeaosobjetosque
possui.
Contornarestaameaafcil:nodeixequeacontadeusuriocomumpossuaoucrienada.ALista1
mostracomoassegurarumatabela.
Lista1.Assegurandoumatabela
postgres=# SET SESSION AUTHORIZATION postgres;
SET
postgres=# CREATE ROLE user1 WITH LOGIN UNENCRYPTED PASSWORD '123';
CREATE ROLE
postgres=# CREATE SCHEMA user1 CREATE TABLE t1(i int);
CREATE SCHEMA
postgres=# INSERT INTO user1.t1 VALUES(1);
INSERT 0 1
postgres=# GRANT USAGE ON SCHEMA user1 TO user1;
GRANT
postgres=# SELECT I FROM user1.t1;
i
--2
(1 row)
postgres=# SET SESSION AUTHORIZATION user1;
SET
postgres=> SELECT I FROM user1.t1;
ERROR: permission denied for relation t1
postgres=> SET SESSION AUTHORIZATION postgres;
SET
postgres=# GRANT SELECT ON user1.t1 TO user1;
GRANT
postgres=# SET SESSION AUTHORIZATION user1;
SET
postgres=> SELECT I FROM user1.t1;
i
--2
(1 row)

ALista2demonstrainterdiodeacessoaoesquemaPUBLIC.
Lista2.Evitandoqueouser1dafunocriequaisquerentidades
postgres=> SET SESSION AUTHORIZATION postgres;
SET
postgres=# REVOKE ALL PRIVILEGES ON SCHEMA PUBLIC FROM user1;
REVOKE
postgres=# SET SESSION AUTHORIZATION user1;
SET
A mensagem de erro "ERRO:
permisso negada para user1 do esquema" significa que esta medida defensiva funciona:
postgres=> CREATE TABLE X();
ERROR: permission denied for schema user1

Acessandoobjetossobocontroledeoutrosusurios
Estevetordeataque,mostradonaLista3abaixo,assumequeousuriotemacessoaoesquema
PUBLICporexemplo,GRANT USAGE ON SCHEMA PUBLIC TO user1.Elefuncionasobasseguintes
suposies:
Todososusuriostem,porpadro,permissoparaseconectaraqualquerbancodedadosnocluster.

Clustersdeposturapermitemaosusuriosacapacidadedecriaremanipulartodasasentidadesno
esquemaPUBLIC.
Umacontadeusuriocomumtemodireitodeacessarcatlogosdosistema.Casocontrrio,aconta
dousurionopodefuncionaradequadamente(intrnsecoaocomportamentodoservidorPostgreSQL).
Lista3.Reunindoinformaessobreumatabela
postgres=> SELECT * FROM user1.t2;
ERRO: permisso negada para relao t2
postgres=> inserir nos valores de user1.t2 (10);
ERRO: permisso negada para relao t2
postgres=>
postgres=> \d
Lista de relaes
Esquema | Nome | Tipo | Proprietrio
--------+------+-------+---------user1 | t1 | tabela | postgres
user1 | t2 | tabela | postgres
(2 linhas)
postgres=> \d t?
Tabela "user1.t1"
Coluna | Tipo | Modificadores
--------+---------+----------i
| nmero inteiro |
Tabela "user1.t2"
Coluna | Tipo | Modificadores
--------+---------+----------i
| nmero inteiro |

Apesardenoserpossvelacessaratabela,ousurioaindapodereunirinformaessobreela.
ALista4mostraacontadeusuriouser1obtendoumalistadecontasdeusurioesuasrespectivas
propriedades,tambm.Ousuriocomumnopodeacessarasprpriassenhas.
Lista4.Obtendopropriedadesdecontasdeusurio
postgres=> select * from pg_user;
usename | usesysid | usecreatedb | usesuper | usecatupd | passwd | valuntil | useconfig
----------+----------+-------------+----------+-----------+----------+---------postgres | 10 | t | t | t | ******** | |
user1 | 18770 | f | f | f | ******** | |
(2 rows)

Todososusuriospossuemahabilidadepadrodeaprenderasdefinieseoesquemadocluster.
ALista5mostraumscriptquereneinformaessobreoesquemadedefiniointeirodoclusterpor
meiodeconsultadoscatlogos.Oscatlogosdosistemapodemsermodificados,ou"raqueados",pelo
superusurio,mitigandoassimestaameaa.
Lista5.Extraindodefiniesglobaisdocluster
#!/bin/bash
psql mydatabase << _eof_
set search_path=public,information_schema,pg_catalog,pg_toast;
\t
\o list.txt
SELECT n.nspname||'.'||c.relname as "Table Name"
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_roles r ON r.oid = c.relowner
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','')
ORDER BY 1;
\q
_eof_
for i in $( cat list.txt ); do
psql -c "\d $i"
done

Criandoeacessandofunesdefinidaspelousurio
Funessoconfiveisounoconfiveis.Linguagensprocessuaisconfiveisexecutaminstrues
dentrodocontextodobancodedados,comocriaodetabelas,ndices,inclusoouremoodedados,
etc.Linguagensproceduraisnoconfiveisalmdosrecursosconfiveis,socapazesdeafetaro
mundorealtambm,comoalistadecontedodeumdiretrio,criao,ouexclusodearquivos,
chamadadeprocessosdosistemaemesmocriaodeconexesdesoqueteparaoutroshosts.
Lista6.Incluindolinguagensproceduraisemumbancodedadoserestaurandoacessoaouser1
postgres=# create language plpgsql;
CREATE LANGUAGE
postgres=# create language plperlu;
CREATE LANGUAGE

postgres=# create language plperl;


CREATE LANGUAGE
postgres=> SET SESSION AUTHORIZATION postgres;
SET
postgres=# GRANT USAGE ON SCHEMA PUBLIC TO user1;
GRANT

Lista7.Linguagensproceduraisconfiveisversusnoconfiveis
postgres=# select lanname as language, lanpltrusted as trusted from pg_language;
language | trusted
----------+--------internal | f
c
|f
sql
|t
plperlu | f
plperl | t
(5 rows)

Diferentementedastabelas,acontadeusuriononecessitadepermissesespeciaisaochamara
funodealgumaoutrapessoa,mesmoseelasforamcriadaspelosuperusurio.
Lista8.Chamandoumafunodesuperusurio
postgres=# SET SESSION AUTHORIZATION postgres;
SET
postgres=# CREATE OR REPLACE FUNCTION public.f1 (
postgres(# OUT x text
postgres(# ) AS
postgres-# $body$
postgres$# select 'hello from f1()'::text;
postgres$# $body$
postgres-# LANGUAGE SQL;
CREATE FUNCTION
postgres=# SET SESSION AUTHORIZATION user1;
SET
postgres=>
postgres=> SELECT * FROM f1();
x
----------------hello from f1()
(1 row)

AfunonaLista9abaixofoicriadapelosuperusuriousandoplperlu.Elaretornaocontedodo
diretriouser1podechamarestafuno.Umusuriocomumpodechamarambasasfunes,
confiveisenoconfiveis.Omelhormtodoparamitigarestaameaanegaroacessofuno
revogandooprivilgio.
Lista9.Explorandofunesporumusurioautorizado
postgres=> SET SESSION AUTHORIZATION postgres;
SET
postgres=# CREATE OR REPLACE FUNCTION public.f2 (
postgres(# OUT x text
postgres(# ) AS
postgres-# $body$
postgres$# # emite contedo do diretrio-raiz em sada padro
postgres$# # observe o uso das aspas simples
postgres$# $a = `ls -l / 2>/dev/null`;
postgres$# $message = "\nAqui est a lista de diretrios\n".$a;
postgres$# return $message;
postgres$# $body$
postgres-# LANGUAGE PLPERLU;
CREATE FUNCTION
postgres=# SET SESSION AUTHORIZATION user1;
SET
postgres=> SELECT * FROM f2();
x
---------------------------------------------------------------------------Aqui est a lista de diretrios
total 120
drwxr-xr-x 2 root root 4096 Aug 29 07:03 bin
drwxr-xr-x 3 root root 4096 Oct 11 05:17 boot
drwxr-xr-x 3 root root 4096 Nov 26 2006 build
lrwxrwxrwx 1 root root 11 Aug 22 2006 cdrom -> media/cdrom
drwxr-xr-x 15 root root 14960 Oct 12 07:35 dev
drwxr-xr-x 118 root root 8192 Oct 12 07:36 etc
(1 row)

Lista10.Assegurandoouser1eogrupoPUBLIC
postgres=# SET SESSION AUTHORIZATION postgres;
SET
postgres=# REVOKE ALL ON FUNCTION f2() FROM user1, GROUP PUBLIC;
REVOKE
postgres=# SET SESSION AUTHORIZATION user1;
SET
postgres=> SELECT * FROM f2();
ERROR: permission denied for function f2
postgres=>

ALista11envolvereuniodeinteligncia.
Lista11.Obtendoocdigodeorigemdafuno
postgres=> SET SESSION AUTHORIZATION user1;
SET

postgres=> select prosrc as "function f3()" from pg_proc where proname='f3';


function f3()
--------------# emite o contedo do diretrio-raiz na sada padro
# observe o uso das aspas simples
$a = `ls -l / 2>/dev/null`;
$message = "\nAqui est a lista de diretrios\n".$a;
return $message;
(1 row)

Paraocultarocdigodeorigem:
Escrevaasuafunocomoummduloemseuambientedelinguagemnativa(C,Perl,Python,etc.)e
armazeneanodiscorgidodohost.Depoiscrieumafunodefinidapelousurioabstrataem
PostgreSQLquechameomdulo.
Consideregravarocdigodeorigememumatabelaedinamicamentecriarsuafunoconformefor
necessrio.
Gravesuafunodefinidapelousurioemoutrobancodedadosnocluster,queentochamadapor
umacontadeusurioautorizadausandoomdulodblink.

Usandoosecuritydefiner
Osecuritydefinerexecutaafunocomosprivilgiosdousurioqueacriou.Assim,umusuriopode
acessarumatabelaque,sobcircunstnciasnormais,estindisponvel.
Porexemplo,comomostradonaLista12,umatabelacomduascolunascriadanoesquemaPostgres
pelopostgresdosuperusurio.Ousuriocomum,user1,invocarumafunousandooparmetro
securitydefinereobterumvalorcombaseemumvalordeentrada.
Lista12.Criandoumatabelaeumafuno
postgres=# SET SESSION AUTHORIZATION postgres;
SET
postgres=# CREATE TABLE postgres.t4(x serial,y numeric);
NOTICE: CREATE TABLE will create implicit sequence "t4_x_seq" for serial column "t4.x"
CREATE TABLE
postgres=# INSERT INTO postgres.t4(y) VALUES (random()::numeric(4,3));
INSERT 0 1
postgres=# INSERT INTO postgres.t4(y) VALUES (random()::numeric(4,3));
INSERT 0 1
postgres=# INSERT INTO postgres.t4(y) VALUES (random()::numeric(4,3));
INSERT 0 1
postgres=# INSERT INTO postgres.t4(y) VALUES (random()::numeric(4,3));
INSERT 0 1
postgres=# INSERT INTO postgres.t4(y) VALUES (random()::numeric(4,3));
INSERT 0 1
postgres=# CREATE OR REPLACE FUNCTION public.f4 (
postgres(# IN a int,
postgres(# OUT b numeric
postgres(# ) RETURNS SETOF numeric AS
postgres-# $body$
postgres$# select y from postgres.t4 where x=$1 limit 1;
postgres$# $body$
postgres-# LANGUAGE SQL SECURITY DEFINER;
CREATE FUNCTION

ALista13mostraqueacontadeusuriouser1agorapodeacessarasinformaesdesejadas.
Lista13.Funonoprivilegiadaacessandoumatabelacomumachamadadefuno
postgres=# SET SESSION AUTHORIZATION user1;
SET
postgres=> SELECT b as "my first record" FROM f4(1);
my first record
----------------0.379
(1 row)
postgres=> SELECT b as "my second record" FROM f4(2);
my second record
-----------------0.200
(1 row)

InvadindoasenhadoPostgreSQL
AadministraodesenhaefetivafundamentalparaaseguranaemumDBMS.funodoDBA
imporumapolticadesenhaaprovada.Umasenhadeveconsistiremcaracteresalfanumricos
escolhidosaleatoriamentequenotenhamumpadrodiscernvel.Aprticacomumditaqueassenhas

possuempelomenosseiscaracteresesomudadasfrequentemente.

ContasesenhasdeusuriodoPostgreSQL
ApolticadeseguranadacontadeusuriodoPostgreSQLcentradanoscomandosSQLquecriame
administramacontadousurio:
CREATE ROLE
ALTER ROLE
DROP ROLE

AsseguintesinstruesSQLpertencemaoantigoestilodeadministraodecontadeusurio(apesar
devlido,vocdeveusaratcnicamaisnovadegerenciamentodeusurioscomofunes):
CREATE GROUP
ALTER GROUP
DROP GROUP
CREATE USER
ALTER USER
DROP USER

Assenhassoarmazenadascomodescriptografadasecriptografadas.Senhadescriptografadasso
armazenadasabertamenteepodemserlidaspelosuperusurio.Asenhacriptografadaenvolvea
geraoearmazenamentodeseuhashMD5,quenopodeserlido.Algumvalidaasenhano
momentodologinaoexecutarhashecomparlacomoquejfoiarmazenadonoclusterdedados.
Abaixoestoalgumaschamadasdeexemploquecriameadministramasenha:
Umacontacriadasemumasenha:
CREATE ROLE user1 WITH LOGIN;
Umacontacriadacomumasenhadescriptografada:
CREATE ROLE roger WITH LOGIN UNENCRYPTED PASSWORD '123'
Umacontaalteradaeumasenhacriptografadadesignadaaela:
ALTER ROLE user1 WITH ENCRYPTED PASSWORD '123'
AexecuodeumaconsultaSQLpelosuperusurioemrelaotabeladecatlogospg_shadow
retornaonomedacontadousurioesuasenha.ALista14mostraocdigo.
Lista14.Obtendoasenhadeumusuriodocatlogo
postgres=# select usename as useraccount,passwd as "password" from pg_shadow where
length(passwd)>1 order by usename;
useraccount | password
-------------+------------------------------------user1 | md5173ca5050c91b538b6bf1f685b262b35
roger | 123
(2 rows)

ALista15mostracomopossvelgerarohashMD5parauser1comasenha123.
Lista15.GerandoumasenhaMD5
postgres=# select 'md5'||md5('123user1') as "my own generated hash",
passwd as "stored hash for user1"
from pg_shadow where usename='user1';
my own generated hash | stored hash for user1
-------------------------------------+------------------------------------md5173ca5050c91b538b6bf1f685b262b35 | md5173ca5050c91b538b6bf1f685b262b35
(1 row)

Prontoparaoutrosusto?ExistemalgunspoucosmecanismosdentrodoPostgreSQLquepodemimpor
umapolticadesenhablindada.
Aspossveislimitaesdeseguranaincluem:
Osuperusurionopodeimporumnmeromnimodecaracteresaserusadoparaasenha.
Apesardehaverumparmetropadronasdefiniesdaconfiguraoparacomoasenhadevaser
armazenada(descriptografadaoucriptografadacomumhashMD5),ousurionopodeserforado
usarummtodosdearmazenamentoparticularpelosuperusurio.
Noexistenenhummecanismoqueimponhaumtempodevidacontadousurio.
Omecanismoquecontrolaotempodevidaefetivodasenhadacontadousuriosetornairrelevante
quandoomtododeconexonoPASSWORDouMD5noarquivodeconfiguraodeautenticao
declientedocluster,pg_hba.conf.
OsparmetrosdetempodeexecuodousurioquesoalteradospelainstruoALTER ROLEeque
foramconfiguradospelosuperusuriooupelasdefiniesdeconfiguraoestabelecidasporpadrono
arquivopostgresql.conf,podemseralteradospeloproprietriodacontadousuriovontade.
Renomearumacontadeusuriolimpasuasenhaseelafoicriptografada.
Nopossvelcontrolarquemfezasmudanasnascontasdeusurioouquandoessasmudanas
ocorreram.
UmaarquiteturaagressivacomediocuidadosadoscatlogosdosistemapodemrecompensaroDBA
vigilante.
Devidoaofascinantepotencialparadanos,aslimitaesdeseguranadascontasesenhasdeusurio
valemoutroartigoseparado.

Invadindoasenha
Imporumasenhaforteumametadigna,massimplesmentenohcomojulgarsuaforaatque
algumainvada.Ainvasodeutilitriossebaseiaemduasabordagens,comoaseguir.
Forabruta
Otestemetdicodohash.Elecomeacomalgumasletras,aumentandoemcomprimentomedida
queoataquecontinua.Estemtodorecomendadoparatestarsenhascurtas.
Ataquesdedicionrio
Usaumaabordagemdeengenhariasocial.Umdicionriodepalavras,usadopeloutilitriodeinvaso,
opontoinicial.Depoisdisso,combinaesdessaspalavrassogeradasetestadasemrelaoao
hashcapturado.Esteataquetiravantagemdacrenaerrneadequeumacadeiadecaractereslonga
queconsistaemumacombinaomnemnicadecadeiasecaracteresmaisseguradoqueum
comprimentoumpoucomaiscurtodecadeiasecaracteresescolhidosaleatoriamente.
Dependendodaforadasenhaedohardwareusado,ainvasopodeocorreremalgunspoucos
segundosatvriosmeses.
OsDBAsestointeressadosemidentificarsenhascommenosdeseiscaracteresdecomprimento.
OutilitriodalinhadecomandosMDCrackusaaforabrutaparatestarasenha.EstebinrioWindows
funcionabememLinuxsobWine.
Inserirwine MDCrack-sse.exe --helpretornaoscomutadoresdeconfigurao.Algunsso
mostradosabaixo:
Usage: MDCrack [options...] --test-hash|hash
MDCrack [options...] --bench[=PASS]

MDCrack [options...] --resume[=FILENAME]|--delete[=FILENAME]


MDCrack [options...] --help|--about

Achamadadelinhadecomandosmaissimpleswine MDCrack-sse.exe --algorithm=MD5 -append=$USERNAME $MD5_HASH,emque$USERNAMEonomedousurioe$MD5_HASHohashMD5


natabeladecatlogospg_shadow.
MDCrackpodeexecutaremmododesesso,comoaseguir,assimpossvelpararumaoperaode
invasoecontinuarposteriormente.
Lista16.MDCrackexecutandoemmododesesso
# iniciar sesso
wine MDCrack-sse.exe --algorithm=MD5 --append=$USERNAME $MD5_HASH\
--session=mysessionfile.txt
# continuar o uso do ltimo modo de sesso
wine MDCrack-sse.exe --algorithm=MD5 --append=$USERNAME $MD5_HASH\
--resume=mysessionfile.txt

Oconjuntodecaracterespadro
abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ.Vocpoderiaterminar
comumprocessoimensoseasenhacandidatainclusseumcaracterequenofizessepartedo
conjuntodecaracteresdefinidocomopadro.possvelmudloparaqualquercombinaode
caracteresalfanumricosquedesejar.Porexemplo,vocpodedesejarincluircaracteresdecontrolee
pontuao.
Oajustedoconjuntodecaracteresfeitonalinhadecomandos.Avarivel$CHARSETrepresentao
conjuntorealdecaracteresqueserusado:
wine MDCrack-sse.exe --algorithm=MD5 --append=$USERNAME $MD5_HASH --charset=$CHARSET

OexemploabaixoumachamadaparaviolarumasenhadoPostgresde123.Ignorarostrsprimeiros
caracteresforneceavocovalorhashMD5md5173ca5050c91b538b6bf1f685b262b35.possvel
determinarasenhacomaseguintechamada(dica:grepparaacadeiadecaracteresCollision
found).Estainvasolevaaproximadamente0,32segundos:
wine MDCrack-sse.exe --algorithm=MD5 --append=user1 173ca5050c91b538b6bf1f685b262b35\
| grep "Collision found"

ALista17demonstraainvasodasenhanosistemacatalogpg_shadow.
Lista17.Invadindoasenha
wine MDCrack-sse.exe --algorithm=MD5 --append=user1 \
`psql -t -c "select substring(passwd,4) from pg_shadow where usename='user1';"` \
| grep "Collision found"

Modelosdeautenticao
Agoraquevocviuoquepodedarerrado,horadeexploraroquevocpodefazerparafazeras
coisascertas.Aautenticaoumassuntovasto,sendoassim,somenteobsicoserabordadoaqui.
Soboguardachuva"autenticao",existemmuitossignificadosdecontroledeacessoparaocluster
Postgres:
SoquetesdedomnioUNIX
AutenticaodeservidorIdent
AutenticaodeservidorLDAP
PAM
Kerberos
SSL

SoquetesdedomnioUNIX

UmsoquetededomnioUNIXumcanaldecomunicaobidirecionalqueremontaumarquivode
muitosaspectos.Oservidorcriaosoquetededomnioqueestaguardandoporclientesparaabriro
arquivocomosistemadearquivos.UmsoquetededomnioPostgreSQLtpicomostradoabaixo.
Lista18.Soquetededomniotpico
robert@wolf:~$ ls -la /tmp|grep PGSQL
srwxrwxrwx 1 robert robert 0 2007-10-15 12:47 .s.PGSQL.5432
-rw------- 1 robert robert 33 2007-10-15 12:47 .s.PGSQL.5432.lock

Observequeonmerodaportaestanexadoaonomedoarquivo.Reconfiguraroservidorparauma
portaTCP/IPdiferentetambmalteraonomedosoquetedodomnio.
Trsparmetrosnoarquivodeconfiguraopostgresql.confcontrolamaspermissesparaumsoquete
dedomnio:
unix_socket_directory(oarquivoPATH)
unix_socket_group(ogrupodeusurios)
unix_socket_permissions(assumecomopadro0777)
OlocaldodosoquetededomniovariadeacordocomadistribuioLinux:
OcdigodeorigemPostgreSQLinstalaecolocaosoquetenodiretrio/tmp.
OBSDlocalizaosoquetenodiretrio/tmp.
OsderivativosRedHatlocalizamosoquetenodiretrio/tmp.
OsderivativosDebianlocalizamosoqueteem/var/run/postgresqlcompermissessomenteparao
postgresqlaccount.
Existemalgumascoisasestranhassobresoquetesdedomnio.Considereasimplicaesdoseguinte
exemplo.
Umclustercriadonodiretrioinicialderobert(superusurio)com
umaautenticaodeconfivel.Nainicializaodoservidor,porm,
aspermissesdesoquetededomniopermitemlogin,exceto
robert.OusuriorobertefetualogincomTCP,masrecusado
nosoquetededomnio.Porm,robertpodeefetuarloginatravs
deumsoquetededomnioapsefetuarsudoparanobody.

Sudo
sudoumcomandopoderosocommuitas

possveisconfiguraesquepermitem
aosusuriosexecutarprogramascomos
privilgiosdeseguranadeoutrousurio
(normalmenteosuperusurioouraiz).
SimilaraocomandodoWindowsrunas.

Esteexemplomostraaversatilidadedaspermissesdearquivos,mitigandoosdanoscausadosporum
crackerquesetornesuperusurio.
Lista19.Permisses
robert@wolf:~$ initdb -A trust -U postgres ~/data
robert@wolf:~$ pg_ctl -D ~/data/ -l ~/logfile.txt \
-o "-c unix_socket_permissions=007 -c unix_socket_directory=/tmp" start
server starting
robert@wolf:~$ psql -h localhost -U postgres -c "select 'superuser:this works' as msg"
msg
---------------------superuser:this works
(1 row)
robert@wolf:~$ psql -h /tmp -U postgres -c "select 'superuser:this fails' as msg"
psql: no foi possvel conectar-se ao servidor: Permisso negada
O servidor est executando localmente e aceitando
conexes no soquete de domnio Unix "/tmp/.s.PGSQL.5432"?
robert@wolf:~$ sudo su nobody
[sudo] password for robert:
$ psql -h localhost -U postgres -c "select 'nobody:this works' as msg"
msg
------------------nobody:this works
(1 row)
$ psql -h /tmp -U postgres -c "select 'nobody:this still works' as msg"

msg
------------------------nobody:this still works
(1 row)

Ident
OservidorIdentrespondeaumasimplespergunta:Qualusurioiniciouaconexoquesaidasuaporta
XeseconectaminhaY?NocontextodeumservidorPostgreSQL,informadooDBMSdaIdentidade
dacontadousurioqueestfazendoumatentativadelogin.OPostgreSQLentoobtmessaresposta
epermiteounegapermissoparaloginseguindoumconjuntoderegrasconfiguradopeloDBAnos
arquivosdeconfiguraoapropriados.
OmecanismodeautenticaodoservidorIdentdoPostgreSQLfuncionamapeandoascontasde
usuriodoPostgreSQLparaascontasdeusuriodoUNIXusandooservidorIdentdoprpriohost.
OsexemplosaseguirassumemquetodasascontadeusuriodoUNIXforammapeadasno
PostgreSQLparapoderefetuarloginemqualquerbancodedados,desdequeelesusemomesmo
nomedecontanoPostgreSQL.OloginfalhaseonomedeusuriodoUNIXnoexistircomoumaconta
deusurionoservidorPostgreSQL,ouseumatentativaforfeitaparaefetuarloginusandooutronome
decontadeusuriodoPostgreSQL.
~SuponhaquevoctenhaseconectadopormeiodeSSHnohost:ssh -l robert wolf.
Lista20.Umloginfalhoeumbemsucedido
robert@wolf:~$ psql -U robert robert
Bem-vindo ao psql 8.2.4, o terminal interativo do PostgreSQL.
Digite: \copyright para termos de distribuio
\h para ajuda com comandos SQL
\? para ajuda com comandos psql
\g ou terminar com ponto e vrgula para executar consulta
\q para encerrar
robert@wolf:~$ psql -U postgres robert
psql: FATAL: Autenticao Ident falhou para usurio "postgres"
-- Isto funciona, su para se tornar o postgres da conta do usurio UNIX

OPostgreSQLusadoisarquivosparaadministrarecontrolartodasassessesdeloginparausurios
queforamautenticadospeloservidorIdent:
pg_hba.conf
Controlaoacessoatravsderegistrosquesodefinidosemumanicalinha.
pg_Ident.conf
EntraemaoquandooservioIdentusadocomooautenticadordacontadousurio.Porexemplo,
oMETHODidentificadocomoIdentnoarquivopg_hba.conf.
Lista21.Exemplosdeconfiguraosimples
Exemplo 1:
Uma conexo LOCALHOST impe que a conta unix robert acesse o banco de dados
robertexclusivamente. No existe autenticao nos soquetes de domnio UNIX.
(pg_hba.conf)
# TYPE DATABASE
USER
CIDR-ADDRESS
METHOD
OPTION
host
all
all
127.0.0.1/32
Ident
mymap
local all
all
trust
(pg_Ident.conf)
# MAPNAME
Ident-USERNAME
PG-USERNAME
mymap
robert
robert
Exemplo 2:
Uma conexo do soquete de domnio impe que a conta unix robert acesse qualquer banco
de dados como conta pg robert;
postgres de conta unix podem acessar qualquer banco de dados como usurio robert.
(pg_hba.conf)
# TYPE DATABASE
USER
CIDR-ADDRESS
METHOD
OPTION
local all
all
Ident
mymap
host
all
all
127.0.0.1/32
trust
(pg_Ident.conf)
# MAPNAME
Ident-USERNAME
mymap
robert
mymap
postgres

PG-USERNAME
robert
robert

Exemplo 3:
Uma conexo do soquete de domnio impe que a conta unix pode se conectar a qualquer
banco de dados com seu homnimo de banco de dados postgres usando a
palavra-chave "sameuser".
pg_Ident.conf no necessariamente aqui.

Conexes do host local atravs de TCP-IP so rejeitadas.


(pg_hba.conf)
# TYPE DATABASE
local template0,template1
host
all

USER
all
all

CIDR-ADDRESS
127.0.0.1/32

METHOD
Ident
reject

OPTION
sameuser

Ex4:
(todos os usurios podem se conectar com seus prprios nomes de usurio somente
aos bancos de dados postgres e robert)
(pg_hba.conf)
# TYPE DATABASE
local template0,template1

USER
all

CIDR-ADDRESS

METHOD
Ident

OPTION
sameuser

Lembresedasseguintesadvertncias:
Asmudanasdeconfiguraotomamefeitoassimquevocrecarregaosarquivos,comopg_ctlD
myclusterreload.
Vriasdefiniesdeconfiguraopodemcausarcomportamentotemperamental.Procurepor
mensagensdeconfiguraofalhasnolog.
Identfoiprojetadoeimplementadoquandoasprpriasmquinasforamconsideradasseguras.
Qualquerservidorremotoqueprocureautenticaodeveserconsideradosuspeito.
OservidorIdentusadosomenteparaautenticarconexesdehostlocal.

Criptografiadedados
Existemmuitasmaneiraspelasquaisvocpodeseexporinadvertidamenteaumcrackerdentrodeuma
intranet.
Vamosdarumasondada.Suponhaquevocexecuteoseguintecomandonoseuhostlocal,
192.168.2.64:tcpdump -i eth0 -X -s 3000 host 192.168.2.100 and port 5432.
Emumhostremoto,192.168.2.100,vocseconectaaoPostgreSQLdohostlocal,quejest
atendendonaporta5432:psql -h 192.168.2.64 -p 5432 -U postgres postgres.Agoraalterea
senhadasuacontadesuperusurio,postgres:ALTER USER postgres WITH ENCRYPTED PASSWORD
'my_new_password';.
Lista22.Discernindoasenhaemumdumpdedadossondado
16:39:17.323806 IP wolf.56336 > laptop.postgresql: P 598:666(68) ack 470 win 3068
<nop,nop,timestamp 9740679 9589666>
0x0000: 4500 0078 4703 4000 4006 6d88 c0a8 0264 E..xG.@.@.m....d
0x0010: c0a8 0240 dc10 1538 6a4f 7ada 6a71 e77c ...@...8jOz.jq.|
0x0020: 8018 0bfc 1a9d 0000 0101 080a 0094 a187 ................
0x0030: 0092 53a2 5100 0000 4341 4c54 4552 2055 ..S.Q...CALTER.U
0x0040: 5345 5220 706f 7374 6772 6573 2057 4954 SER.postgres.WIT
0x0050: 4820 454e 4352 5950 5445 4420 5041 5353 H.ENCRYPTED.PASS
0x0060: 574f 5244 2027 6d79 5f6e 6577 5f70 6173 WORD.'my_new_pas
0x0070: 7377 6f72 6427 3b00
sword';.

TneisSSHusandoredirecionamentodeporta
OredirecionamentodeIPumatecnologiadetunelamentoqueredirecionapacotesdaInternetdeum
hostparaoutro.ElepermitequeseusclientesPostgreSQL,comopsql,pgadmin,emesmo
openoffice,seconectemaoservidorPostgresremotocomumaconexoSSH.
Considereasseguintesquestes:
OqueacontecesenoexistirnenhumclientepsqlnoservidorPostgreSQLremoto?
Oqueacontecesevocprecisarfazeruploadoudownloaddedadosentresuaestaodetrabalhoeo
hostremoto?
Oquevocfazquandoprecisausarosclientesdobancodedadosporqueelespodemexecutarcertas
tarefasqueoclientepsqltambmnopodefazer,ouquenopodefazerdejeitoalgum?
Comofazerotunelamentodesuaredeparaqueasuaequipepossaseconectarremotamenteaum
bancodedadosprotegidoporumfirewall?

Esteexemploconectaumcliente(hostlocal)aumhostremoto(192.168.2.100).Umaconexocom
proxynaportadaestaodetrabalhode10000criada.Ocliente,naconexocomaporta10000,
redirecionadoparaoservidorPostgreSQLdohostremoto,queestatendendonaporta5432:ssh -L
10000:localhost:5432 192.168.2.100.
Incluirocomutador-gpermitequeoutroshostsobtenhamvantagemdasuaconexoredirecionada,o
queatornaumaredeprivadavirtual(VPN)instantneaparaconexesPostgres:ssh -g -L
10000:localhost:5432 192.168.2.100.
Algumasadvertnciassobretunelamento:
Oclienteeoservidordobancodedadostmaimpressodequeestosecomunicandocomseu
prpriohostlocal.
Lembresedeconfiguraroarquivopg_hba.confparadefiniraautenticaocorretaparaasconexesdo
hostlocalusandoTCP/IP.
Portasabaixode1024soexclusivamentecontroladaspeloraiz.
SessesdeSSHnecessitamdeumacontadeusurioexistentenoservidorPostgreSQL/SSH.

SessescriptografadasporSSL
SessescriptografadascomPostgreSQLnecessitamqueoservidorsejacompiladocomocomutador-with-openssl.OsbinriosdistrodoLinuxpossuemessafuno.Clientescomopsqlepgadmin
tambmpossuemosrecursosdorequisito.
possvelespecificaroservidorusandooutilitriodelinhadecomandospg_config,comoaseguir.
pg_config --configure

ParaprepararoservidorPostgreSQLparasessescriptografadas:
1. Crieumachavedeservidorautoassinada(server.key)eumcertificado(server.crt)usandoa
ferramentadelinhadecomandosOpenSSLopenssl.
1. Crieachavedoservidor:openssl genrsa -des3 -out server.key 1024.
2. Removaapassphraseopenssl rsa -in server.key -out server.key.
3. Crieumcertificadoautoassinadoparaoservidor:openssl req -new -key server.key -x509
-out server.crt.
2. Instaleosdoisarquivos,server.keyeserver.crt,nodiretriodoclusterdedados.
3. Editeoarquivopostgresql.confeconfigureoparnomeado:ssl = on.
4. Reinicieoservidor.
Lista23.ConexodesessocriptografadacomSSLbemsucedida
robert@wolf:~$ psql -h 192.168.2.100 -U robert
Bem-vindo ao psql 8.2.4, o terminal interativo do PostgreSQL.
Digite: \copyright para termos de distribuio
\h para ajuda com comandos SQL
\? para ajuda com comandos psql
\g ou terminar com ponto e vrgula para executar consulta
\q para encerrar
ConexoSSL(cdigo:DHERSAAES256SHA,bits:256)
robert=#

Oservidorsempretestaaconexoprimeiroparaospedidosdesessocriptografados.Porm,
possvelcontrolarocomportamentodoservidoreditandooarquivodeautenticaopg_hba.conf.No
ladodocliente,possvelcontrolarocomportamentopadrodocliente(psql)paraousodeuma
sessocriptografadaounopormeiodadefiniodavariveldeambientePGSSLMODE.
Existemseismodos(doisnovosmodossoespecficosdaV8.4).

Modo

Descrio

disable TentarsomenteconexesSSLdescriptografadas.
allow

Primeirotentaumaconexodescriptografadae,senoobtiverxito,umatentativade
conexoSSLfeita.

prefer

OopostodeallowaprimeiratentativadeconexoSSLeasegundadescriptografada.

require

OclientetentasomenteumaconexoSSLcriptografada.

verify
ca

UmaconexoSSL,ecertificadodeclientevlidoassinadoporumCAconfivel.

Verify
full

UmaconexoSSL,certificadodeclientevlidoassinadoporumCAconfivel,eonome
dohostdoservidorcorrespondenteaonomedohostdocertificado.

Porexemplo:export PGSSLMODE=prefer.

CertificadosSSL
AutenticaoSSLquandooclienteeoservidortrocamcertificadosqueforamassinadosporum
terceiroquetemcredenciaisinquestionveis.Esseterceiroconhecidocomoumaautoridadede
certificao(CA).Aconexorecusadapeloservidoroupeloclientequandonorecebeumcertificado
legtimodooutro.
Apesardehavermuitosdetalhes,aconfiguraodeumaautenticaonoPostgreSQLusando
certificadosSSLdireta:
1. Editepostgresql.conf,ssl=on.
Aautenticaodoladodoservidorprecisaqueosseguintesarquivosestejamemseuclusterde
dados:
server.key
server.crt(quedeveserassinadoporumCA)
root.crt(verificaaautenticaodocliente)
root.crl(listaderevogaodecertificado,opcional)
Oarquivoroot.crtcontmumalistadecertificadosCAaprovados.Devehaverumcoletainteirade
certificadosdisponveisparaasuadistribuioparticular,quevocpodeincluir.
Aarquivoroot.crlsimilaraoroot.crtquantoaofatodequecontmumalistadecertificadosassinados
peloCA.Porm,essescertificadossodeclientesquetiveramodireitodeconexorevogado.Um
root.crlvazionointerferircomoprocessodeautenticao.
Aautenticaodoladodoclienteprecisaqueosseguintesarquivosestejamnodiretrioinicialdo
cliente,~/.postgresql:
postgresql.key
postgresql.crt
root.crt(verificaaautenticaodoservidor)
root.crl(listaderevogaodecertificado,opcional)
Assimcomocomoroot.crtdoservidor,arquivodocliente,root.crt,contmumalistadecertificados
queforamassinadosporumterceiroCArespeitado.Oltimoarquivo,root.crl,opcionaleusado
pararevogarcertificadosdoservidor.
Aobtenodecertificadosrequerqueambos,clienteeservidor,tenhamenviadopedidosde
certificado,client.csreserver.csr,aoCA.Oscertificadossomentepodemsercriadosapsterem
geradosuasprpriaschavesprivadas,comoaseguir.

openssl req -new -newkey rsa:1024 -nodes -keyout client.key -out client.csr
openssl req -new -newkey rsa:1024 -nodes -keyout server.key -out server.csr

Existemaisdeumamaneiradeexecutaroutilitrioopensslparaobteroquevocprecisa.Por
exemplo,possvelcolocarumtempodevidaneles,oupossvelgerloscomcertificadosauto
assinadoseeliminaranecessidadedeumCA.
2. Agoravoctemtrsopesparagerarseuscertificadosdeclienteeservidor.Vocpode:
Obterclient.csreserver.csrassinadosporumCArespeitado.
SetornarumCAusandooutilitrioopensslperlCA.pl.
Criarcertificadosautoassinadoseincluilosnosarquivosroot.crtdoservidoredocliente,
respectivamente.
3. AbaixoestumconjuntodecomandosabreviadosparausarcomoCA.pl.Consulteasmanpages
CA.plparaobtermaisinformaessobrepedidosdecertificado.
CA.pl -newca(criaranovaCA)
CA.pl -newreq(criarumpedidodecertificadocomumachaveprivada)
CA.pl -signreq(assinaropedidodecertificadopeloCAquevoccriou)

Paraospuristasdosoftwarelivre,semprehohttp://www.cacert.orgparacertificados'grtis'.
Lista24.Umcertificadodeexemplo
-----BEGIN CERTIFICATE----MIIC9TCCAl6gAwIBAgIJAMuhpY+o4QR+MA0GCSqGSIb3DQEBBQUAMFsxCzAJBgNV
BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQxFDASBgNVBAMTC0NvbW1vbiBOYW1lMB4XDTA3MDIxMjEy
MjExNVoXDTA3MDMxNDEyMjExNVowWzELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNv
bWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEUMBIG
A1UEAxMLQ29tbW9uIE5hbWUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKA4
nX/eBKsPJI1DmtH2wdJE9uZf+IRMUWYrAEDL4F6NEuo2+BsIoOBKS/rrV77Itet9
kduJCQ6k/z2ouAVb4muXpJALDjJpYBXt9wqZf+2p1n9dqDw1rCWBjXIdhOcA3DDv
u0Ig1FUfm8GS97evxM5IJBECRnK/5JZroXCRSHcpAgMBAAGjgcAwgb0wHQYDVR0O
BBYEFElEWNUCV+61itXp86czrDe35vjrMIGNBgNVHSMEgYUwgYKAFElEWNUCV+61
itXp86czrDe35vjroV+kXTBbMQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1T
dGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRQwEgYDVQQD
EwtDb21tb24gTmFtZYIJAMuhpY+o4QR+MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcN
AQEFBQADgYEAaFzbUmXcWVzqaVeEpZkNwF/eVh110qIUUxXGdeKZGNXIyK67GCUY
SG/IFkZ/hrGLeqElLrdmU0mHd2Enq2IuvhxnsOVTTickjKospJvlHPYSumkXx0Xp
zey9PhjLh1chpxNGTATKb8ET8YZvBRrDHl/EMPIjLd62iSR/ugFe8go=
-----END CERTIFICATE-----

4. Supondoquevocgeroucertificadosautoassinados,copieosnolocalcorretoeediteroot.crt.
Ocertificadodoclientesalvonoroot.crtdoservidoreocertificadodoservidoralvonoroot.crtdo
cliente.
5. Monitoreasmensagensdelognareinicializaodoservidorparaconfirmarquetudoestconfigurado
corretamente.
Ocomportamentopadrodoservidoraindausacriptografia.Issopodeserdesativadoeditandoseopar
denomesssl_ciphers='NULL'empostgresql.confereiniciandooservidor.Consideresuadeciso
comcuidadoconfigurarssl_ciphersparaNULLefetivamentedesativaacriptografia.

Concluso
Nesteartigo,vocaprendeualgunsfundamentossobreaproteodoservidordoseubancodedados
PostgresSQL.Existemuitomaismaterialsobreesteassunto,masnopossvelabordarmuitostpicos
emumsartigo.NohosuficientesendoescritosobreoPostgreSQLatualmente.Talvez,comum
poucodasuaajuda,possamosaprendermaissobreaseguranadoPostgreSQL.

Download
Descrio

Nome

Tamanho

Samplecode

ospostgresecuritylistings_src_code.zip

10KB

Recursos
Aprender

ProgramaGlobalde
EmpreendedorismodaIBM

Confiraotutorial"SeguranaTotalemumBancodeDadosPostgreSQL,"
quesebaseiaemumasriedeartigosdoautor.

Faapartedoprogramaque
buscaporempreendedoresque
ajudamamodificaramaneira
comoomundofunciona.

LeiaaDocumentaodoPostgreSQLV8.3.8.

DemosIBMBluemix

Consultehttp://c3rb3r.openwall.net/mdcrack/.
NoWikipedia,saibamaissobresoquetesdedomnioUNIXprotocoloIdent,
umprotocolodaInternetqueajudaaidentificarousuriodeumaconexo
TCPparticulareautoridadedecertificao.
Obtenhatodaasasnotcias,FAQ,documentos,origememaisparaoProjeto
OpenSSL.
Obtenhavriascorreesparaosprogramastcpdumpelibpcap.
Saibamaissobreredirecionamentodeporta,outunelamento,para
redirecionartrfegoTCPsemseguranaatravsdoSSHSecureShell.
Paraouvirentrevistasediscussesinteressantesparadesenvolvedoresde
software,confiraospodcastsdodeveloperWorks.
Mantenhaseatualizadocomoseventosewebcaststcnicosdo
developerWorks.
SigaodeveloperWorksnoTwitter.
Confiraasprximasconferncias,tradeshows,webcastseoutrosEventos
futurosnomundotodoquesodeinteressedosdesenvolvedoresde
softwarelivredaIBM.
VisiteazonadesoftwarelivredodeveloperWorksparaobterinformaes
extensivassobreinstrues,ferramentaseatualizaesdeprojetopara
ajudnodesenvolvimentodetecnologiasdesoftwarelivreeemseuusocom
produtosdaIBM,assimcomonossosartigosetutoriaismaisconhecidos.
OMydeveloperWorksumexemplodeumacomunidadegeralbem
sucedidaqueabrangeumaamplavariedadedetpicos.
AssistaeaprendasobreaIBMetecnologiasdesoftwarelivreefunesde
produtocomasdemosgratuitasdodeveloperWorksOndemand.
Obterprodutosetecnologias
Inoveseuprximoprojetodedesenvolvimentodesoftwarelivrecomo
softwaredeavaliaoIBM,disponvelparadownloadouemDVD.
FaaodownloaddeversesdeavaliaodeprodutoIBMouexperimenteas
versesdeavaliaesdisponveisonlinenoIBMSOASandboxecoloque
suasmosemferramentasdedesenvolvimentodeaplicativoseprodutosde
middlewaredoDB2,Lotus,Rational,TivolieWebSphere.
Discutir
ParticipedosblogsdodeveloperWorkseenvolvasenacomunidadedo
developerWorks.

Confiraasriededemossobrea
plataformaPaaSdaIBM,
contedo100%emportugus

CursosEAD
CapacitesenastecnologiasIBM
semcusto