[ Home | Liste | F.A.Q. | Risorse | Cerca... ]


[ Data: precedente | successivo | indice ] [ Argomento: precedente | successivo | indice ]


Archivio: Novembre 2002 ml@sikurezza.org
Soggetto: Realizzare un server sicuro per carte di credito
Mittente: BlueRaven
Data: 13 Nov 2002 18:43:31 -0000
Ciao a tutti, cerco di spiegare in poche parole quel che devo fare:
l'azienda per cui lavoro sta realizzando una applicazione per la
prenotazione online di stanze d'albergo.
Come certamente saprete, quando prenotate una stanza in un albergo, e' d'uso
fornire la propria carta di credito a garanzia del pagamento.
Per tutta una serie di motivi che non vi sto a spiegare - chi fosse
interessato mi contatti pure in privato - nessuno, ripeto nessuno dei
sistemi classici (Banca Sella, Telepay e company) e' adatto a fare cio' che
voglio.
Mi trovo pertanto a dover gestire in prima persona un elenco di carte di
credito, da memorizzare su un server e da consultarsi attraverso
un'interfaccia web.
Fermo restando che e' una pazzia (e l'ho gia' fatto presente, dotandomi di
liberatoria), avrei bisogno di qualche consiglio per quanto riguarda la
realizzazione tecnica del tutto.
La macchina che fungera' da server ha installata una Debian stable ridotta
all'osso, con il kernel ricompilato per supportare il solo hardware e le
funzionalita' strettamente necessarie e che provvedo personalmente ad
aggiornare ogni qualvolta esce un security advisory relativo a un pacchetto
installato.
Per quanto riguarda i servizi, la macchina sta dietro un firewall che espone
all'esterno solo le porte strettamente necessarie. Gli unici servizi che
girano sono un ssh, un Apache con supporto PHP e un MySQL.
Il database non e' accessibile via TCP/IP, l'unica interfaccia e' un socket
locale. L'utente root e' dotato di password forte e ho impostato delle ACL
in modo che solo un utente apposito, senza privilegi amministrativi, possa
interagire col database.
Il PHP e' configurato in modo che non si possano aprire file al difuori
della webroot di proprieta' altrui, neanche tramite la creazione di un
symlink (SymLinksIfOwnerMatch impostato in Apache dalla / in giu').
Sto gia' verificando se posso aggiungere anche il safe mode e fornire cosi'
un ulteriore livello di protezione (purtroppo, l'applicazione per la
consultazione non la realizzo io).
La configurazione di Apache e' minimale, giusto quel che basta per offrire
l'interfaccia web per la consultazione, il tutto in SSL a 128 bit e chiave
RSA a 1024 bit.
Infine, l'accesso ssh e' possibile solo ed esclusivamente con autenticazione
a chiave pubblica/privata a 1024 bit, tutte le altre forme di autenticazione
sono esplicitamente disabilitate.
Mi sembra una discreta base di partenza, ma mi piacerebbe sapere se secondo
voi ho trascurato qualcosa e/o se ci sono alternative migliori.
Ora, i punti principali che mi preoccupano sono:

a. poiche' le pagine web degli alberghi risiedono, fisicamente, su un altro
server ed e' qui che vengono raccolti i dati delle carte di credito, sempre
in SSL ovviamente, ho il problema di spedire questi dati al server di
backoffice per gli albergatori (quello sopra descritto). La macchina,
infatti, sta nella stessa DMZ di tutte le altre e ce ne sono anche alcune in
housing che non amministro io direttamente.
L'unico modo di dare un grado di sicurezza decente mi sembra utilizzare una
qualche forma di crittografia tra le due macchine, in modo da costruire una
specie di mini VPN interna alla DMZ.
Il problema principale e' che non posso semplicemente fare una query remota
sul database (che non ascolta sull'interfaccia di rete), quindi dovrei
scrivermi anche una piccola utility che non faccia altro che prendere i dati
che arrivano dal tunnel crittato e li traduca in una query SQL attraverso il
socket.
Sapete se esiste qualcosa che lo faccia gia' e che sia ragionevolmente
sicuro?
Per quanto riguarda il tunnel, esistono una pletora di soluzioni, dal
semplice ssh fino a FreeS/WAN. Avete consigli e/o esperienze?
Non mi serve una descrizione dettagliata, poi con l'implementazione me la
vedo io, solo qualche dritta.

b. la memorizzazione dei dati sul server. Premetto che la finestra temporale
di disponibilita' dei dati e' abbastanza stretta (una settimana al massimo,
dopodiche' vengono cancellati), ma volevo ugualmente trovare un modo per
evitare di memorizzarli in chiaro.
L'archivio non sara' molto grande, stimo che al massimo saranno presenti una
trentina di numeri alla volta.
Se fosse necessario, sono anche disposto a rinunciare a MySQL e usare
qualcosa di alternativo.
Non so, pensavo a un archivio DBM che risiede su una partizione criptata che
viene decriptata al volo quando c'e' una richiesta o cose del genere.
Avete qualche consiglio in proposito?

Vi ringrazio in anticipo per ogni suggerimento: ho cercato con cura in Rete
(si', Koba, anche sugli archivi della lista! :-P) ma sembra che io sia
l'unico pazzo su questa Terra a non affidarsi ad un sistema esistente (ma
non dipende da me).
Ovviamente, se servono piu' info, rimango in ascolto.

-- 
BlueRaven

There are only 10 types of people in this world...
those who understand binary, and those who don't.

________________________________________________________
http://www.sikurezza.org - Italian Security Mailing List




[ Home | Liste | F.A.Q. | Risorse | Cerca... ]

www.sikurezza.org - Italian Security Mailing List
(c) 1999-2005