HP, não esconda DRM em uma atualização de segurança

Nos últimos dias mais de 10,000 pessoas  se juntaram a EFF na mobilização para que a HP repare suas  impressoras que se auto-destroem (proteção DRM para quando usados cartuchos não oficiais).

Parece que conseguiram a atenção da empresa:  Hoje a HP respondeu em seu blog. Reconhecendo que seus consumidores são mais propensos a ver uma atualização que limita a interoperabilidade como um bug do que como um recurso, a HP diz que vai disponibilizar uma atualização de firmware opcional para reverter as mudanças feitas. Estamos muito contentes de ver HP dando esse passo.

Mas ainda existem questões em aberto.

Primeiro, gostariamos de saber o que a HP planeja informar os usuários sobre o upgrade opcional de firmware. No momento, a vasta maioria das pessoas que usam as impressoras afetadas não sabem por que suas impressoras perderam funcionalidades, muito menos sabem que é possível restaurar essas funcionalidades. Todos esses consumidores deveriam conseguir usar suas impressoras livres de restrições artificiais e não apenas os mais antenados que estão acompanhando o processo.

Segundo,  estamos pedindo para a  HP para prometer que nunca voltará a usar uma atualização de segurança para retirar características do produto. Os clientes devem ser capazes de comprar uma impressora HP sem medo de que a limites de uso artificiais serão impostos no futuro por meio de atualizações. Seria um pesadelo para os clientes  evitar a instalação de atualizações de segurança por medo de alterações de recursos indesejados e sem aviso prévio. Mesmo as pessoas que não usam impressoras Officejet deveriam temer usar impressoras sem atualizações de segurança instaladas.

Terceiro, a HP deve prometer que nunca vai usar Seção 1201 do Digital Millennium Copyright Act de processar ou ameaçar pesquisadores de segurança para contornar suas travas digitais durante seu trabalho. Nós já vimos como departamentos legais de empresas que defendem DRM tem dissuadido pesquisadores  de divulgação de vulnerabilidades. Por uma questão de segurança dos seus clientes, a HP deve comprometer-se a imunização os pesquisadores de segurança contra ameaças legais sob DMCA 1201.
Essas medidas podem ajudar a corrigir o erro cometido pela HP. Mas continuamos preocupados com a tendência de empresas que utilizam travas digitais para quebrar a funcionalidade de seus próprios produtos, e, em seguida apresentam esses bloqueios como recursos de segurança. Estes anti-características colocam em perigo a segurança da Internet ao fazer nossos produtos menos úteis. Esperamos que outras empresas aprendam com os erros da HP.

 

Diga para HP:  Não ao DRM!

Fonte: https://www.eff.org/deeplinks/2016/09/dont-hide-drm-security-update

Problema com PyEnv no OSX Sierra

Pyenv é um gerenciador de instalações do Python, permite a instalação de várias versões do interpretador em paralelo, incluindo pypy, jython stackless etc.

Após instalar o OSX Sierra tive um problema que me impedia de instalar o python 3.5.2:

zipimport.ZipImportError: can't decompress data; zlib not available

Por alguma razão, no Sierra a biblioteca zlib não vem instalado por padrão para uso no stack unix padrão, para resolver isso fiz o seguinte:

xcode-select --install

Com isso uma caixa de diálogo vai se oferecer para instalar o XCode inteiro ou apenas as ferramentas de console. Instalei as ferramentas de console e o problema foi resolvido 🙂

10 coisas que você deve fazer ao instalar o WordPress

Seguem algumas dicas do que se deve fazer ao instalar o WordPress.

1.  Altere o título, tagline, fuso horário e favicon. Essas são pequenas coisas que personalizam seu site ainda mais e ajuda no agendamento de posts.

2.  A estrutura permalink do WordPress padrão não é muito amigável para SEO . Selecione Permalink a partir do menu de Configurações. Lá você vai encontrar algumas opções diferentes para a criação de uma nova estrutura. Os melhores para escolher é Post Name que é mais útil para os visitantes.

3. Configurar as definições de leitura. Seja qual for o tema que você tem você pode optar por ter seus posts na primeira página ou ter página para mostrar os posts. Então você pode decidir quantos posts para mostrar na página aqui.

4. Instale o plugin SEO WordPress by Yoast que checa seu conteúdo antes de atualizar seu site. É fácil de usar e pode até mesmo gerar um sitemap XML  com um clique do mouse.

5. Evite temas gratuitos eles são propensos a codificação base64, e podem ser usados para inserir  spam links em seu site, ou outro código malicioso que pode causar todos os tipos de transtornos.

6. Instalar um plugin de cache comoW3 total cache ou WP super
cache
. Esses plug-ins geram arquivos HTML estáticos a partir do seu blog WordPress dinâmico que são servidos por seu servidor em vez de processar os scripts PHP.

NOTA: Leitores indicaram o uso de MEMCACHE e REDIS.

7. Para manter o seu WordPress seguro use plugins como succuri-scanner,
exploit-scanner
que busca em seu site por malware e varre seu banco de dados caçando por qualquer código suspeito.

NOTA: Leitores indicaram o Wordfence plugin.

8. Evite que comentários spam prejudiquem seu SEO instalando plugins anti-spam . Você pode usar Akismet que vem WordPress ou o
Antispam Bee.

9. Otimize seu site para compartilhamentos em redes sociais através de plug-ins. Ter um plug-in de compartilhamento social ajuda o seu site ser compartilhado com outros o que aumenta seu tráfego e visitantes.

10. Agende backups regulares que podem te salvar em situações catastróficas como site hackeado ou coisa pior. Você pode usar alguns plugins de backup como BackUpBuddy e BackupWordPress.

fonte: http://onlineshouter.com/

PostgreSQL para usuários Mysql

Eu sei Mysql, então PostgreSQL não vai ser problema certo ? Errado.

Segue uma lista de soluções que enfrentei , que sirva de guia para quem já enfrentou os mesmos desafios.

Criando o primeiro Banco de Dados

Versão MySQL:

$ mysql -u root -p
 mysql> CREATE DATABASE dbTest;
 mysql> USE dbTest;

No Linux,  você deve logar com o usuário postgres  (após instalar o postgresql ).

$ su - postgres
 postgres@x220:~$ psql # Inicia o console
 postgres=# \h # Lista os comandos SQL disponíveis.
 postgres=# \h [comando] # Mostra o uso do [comando]

Cadê o CREATE DATABASE ?  Não tem, o comando é dado fora do console, deslogue do console com Ctrl-D ou \q e digite:

postgres@x220:~$ createdb dbTest

Legal, vamos entrar no console e usar o USE dbTest… Oops, não tem USE.

postgres=# \? # Lista os comandos internos
postgres=# \c dbTest

Agora você está conectado ao banco de dados “dbTest” como usuário “postgres”.

dbTest=#
OS X

No OS X o usuário postgres não é criado, então você deve rodar o psql no terminal.

CrIANDO UM NOVO USUÁRIO

No Mysql os comandos são parecidos com esses aqui:

mysql> CREATE USER milestone IDENTIFIED BY 'milestone';
mysql> GRANT ALL ON dbTest.* TO milestone;

No postgres a sintaxe é diferente, o comando \h CREATE USER explica.

dbTest=# CREATE USER milestone WITH PASSWORD "milestone";
ERROR: syntax error at or near ""milestone""

dbTest=# CREATE USER milestone WITH PASSWORD 'milestone';
postgres=# GRANT ALL ON DATABASE dbTest TO milestone;
ERROR: database "dbtest" does not exist

Oops, deu erro !!! O problem é que dbtaste realmente não existe, o nome do banco de dados foi convertido para lowercase no comando ( e foi executado dessa forma). A solução é usar aspas duplas como no exemplo abaixo:

postgres=# GRANT ALL ON DATABASE "dbTest" TO milestone;
GRANT

Legal! Agora vamos logar com esse usuário.

postgres=# \c - milestone
FATAL: Peer authentication failed for user "milestone"

hum…. Você deve configurar o  PostgreSQL  para permitir  que o usuario milestone tenha permissão de logar via password.  No arquivo /etc/postgresql/9.<x>/main/pg_hba.conf . Mude as linhas:

local all all peer

para

local all all md5

ou a linha abaixo para permitir apenas para o usuário milestone:

local all milestone md5

Obviamente essa linha deve ser colocada antes da regra válida para todos usuário ou não vai funcionar. Mais ou menos assim:

local all milestone md5
 local all all md5

PostgreSQL deve ser reiniciado:

# service postgresql restart

ou

# /etc/init.d/postgresql restart
PERMISSões Nas TABeLAS

Infelizmente todas as tentativas de ler ou escrever nas tabelas do banco vão falhar.

A especificação define uma hierarquia fixa de catalog.schema.table . No PG “catalog” é o banco de dados.

dbTest=# \dn
List of schemas
Name | Owner
--------+----------
 public | postgres
(1 row)

Então nosso usuário milestone precisa de permissão para acessar dbTest.public.* , tanto para todas as tabelas como as sequencias. A sequencia é usada (e alterada nos inserts) para alguns tipos de dados.

dbTest=# GRANT ALL ON ALL TABLES IN SCHEMA public TO milestone;
dbTest=# GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO milestone;
AUTO_INCREMENT

Obviamente não existe. Mas existe um tipo de dados para isso.

dbTest=# CREATE TABLE foo (id serial PRIMARY KEY, bar text);

O equivalente MySQL é:

mysql> CREATE TABLE foo (id int PRIMARY KEY AUTO_INCREMENT, bar text);
SHOW TABLES, DATABASES etc.
 postgres=# \l # SHOW DATABASES
 postgres=# \dt # SHOW TABLES
 postgres=# \d myTable # DESCRIBE myTable
Arquivos de configuração e testes

Uma instância PostgreSQL possui (e mantém) sua própria área de dados. Esse diretório (também conhecido como datadir) contém arquivos de configuração e a coleção de bancos de dados. Isso permite ter multiplas instâncias do PostgreSQL aceitando conexões em multiplas portas, mas isso também significa ao iniciar o postgres você sempre deverá informar o path dessa área de dados.

postgres@x220:~$ mkdir db13 # Cria nova area de dados
postgres@x220:~$ initdb -D db13 # Inicializa area de dados
postgres@x220:~$ postgres -D db13 & # Roda o PostgreSQL em background
postgres@x220:~$ pg_ctl status -D db13 # Checa se esta rodando
postgres@x220:~$ createdb dbTest # Cria novo banco
postgres@x220:~$ psql # Conecta ao PostgreSQL rodando na porta default (5432)
postgres@x220:~$ pg_ctl stop -D db13 # Para a instancia rodando em db13
postgres@x220:~$ postgres -D db12 -p 6543 & # Roda outro servidor, mas em uma area diferente e em outra porta (6543)
postgres@x220:~$ createdb dbTest -p 6543 # Cria novo DB (mantido pela segunda instancia na porta 6543)
postgres@x220:~$ psql -p 6543 # Conecta em db12

Para encontrar em qual diretório sua instancia do postgres está rodando, você pode usar algo como ps aux | grep postgres .

Socket file errors

Erros como:  /var/run/postgresql/.s.PGSQL.5432.lock not found podem acontecer em sistemas  Debian onde o PostgreSQL não está configurado para subir na inicialização ( rcconf –off postgresql por exemplo)
Existem duas soluções para esse problema, ou você cria /var/run/postgresql :

# mkdir /var/run/postgresql 
# chmod a+w /var/run/postgresql # adiciona permissão de escrita para o diretório

Ou você muda o arquivo postgresql.conf para escrever o socket em outro diretório, como o /tmp

unix_socket_directory = '/tmp' # (reinicie o postgres)

Por outro lado, você pode indicar ao postgreSQL o novo diretório de socket direto da linha de comando:

postgres@x220:~$ psql -h /tmp # Our socket directory is now /tmp

fonte: http://granjow.net/postgresql.html

netcat

Netcat é uma das ferramentas mais legais que existe no mundo *nix, se bem usado pode salvar sua vida quando não se tem outras ferramentas de rede disponíveis. É uma versão mais sofisticada do telnet. Com ele você pode transferir arquivos, testar portas ( como o nmap ), criar um web server etc.

Truques básicos:
Conectando na porta 80 do localhost (tente com outras URLs e servidores):

$ nc localhost 80

Servidor socket na porta 5000:

nc -l 5000

Se combinados os dois exemplos anteriores vão se comportar como um Chat 🙂
Um webserver muito útil para testar portas ou até mesmo subir uma página de manutenção em um servidor.

$ while true; do; sudo nc -l 80 < index.html; done

O Loop while permite renderizar a página para mais de uma conexão, é possível servir formatos binários também.

Mais um exemplo legal, um backdoor shell 🙂 Precisa acessar um computador remoto ? Sem problemas:

Abrindo a porta 2222 com o bash rodando:

$ ncat -v -l 2222 -e /bin/bash

Para acessar sua backdor basta:

$ ncat localhost 2222

Lembrando que pode ser usado em servidores remotos, basta trocar o localhost pelo IP ou dominio.

É possível usar o netcat como portscanner, por exemplo para escanear da porta 1 até a 100:

 

$ nc -v -z localhost 1-100

Transferência de arquivos também não é um problema para netcat:

Para disponibilizar um arquivo na porta 5000:

$ nc -l 5000 < /etc/passwd

Para copiar o arquivo:

 $ nc localhost 5000 > passwd

Clonar um HD/SSD de um servidor direto no de outro também é possível:

No servidor original:

$ dd if=/dev/vda | nc -l 5000

No servidor que vai receber a cópia:

$ nc -n localhost 5000 | dd of=/dev/vda

Sempre lembrando que os comandos valem para servidores e máquinas remotas, é só trocar o localhost dos exemplos pelo domínio.

Backup remoto também não é um limitador para o netcat:

No servidor

$ nc -l 5000 | tar -xv

No cliente:

$ tar -cv /path/ | nc localhost 5000

fonte http://aarvik.dk/netcat-basics-and-a-few-smart-examples/

seguranca htaccess

Siga as seguintes regras de segurança em seu .htaccess para proteger seu site contra tentativas de invasões básicas.

Lembre-se que além de utilizar estas regras de segurança você deve manter sempre sua aplicação atualizada para evitar que Exploits sejam utilizados.

É preciso que seja criado um arquivo chamado 403.html dentro da raiz de seu site e será acessível via seusite.com.br/403.html. Os usuários que entrarem nas regras apresentadas verão esta página.

Security rules – iporto.com.br (suporte@iporto.com)

IndexIgnore *
Options +FollowSymLinks All -Indexes
ServerSignature Off
# Return 403 Forbidden error.

ErrorDocument 403 /403.html

RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK|PROPFIND|OPTIONS) [NC,OR]
RewriteCond %{THE_REQUEST} (\\r|\\n|%0A|%0D) [NC,OR]
RewriteCond %{HTTP_REFERER} (<|>|’|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{HTTP_COOKIE} (<|>|’|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{REQUEST_URI} ^/(,|;|:|<|>|â€>|â€<|/|\\\.\.\\).{0,9999} [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (libwww-perl|curl|wget|python|nikto|scan) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (<|>|’|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
#Block mySQL injects
RewriteCond %{QUERY_STRING} (;|<|>|’|â€|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|cast|set|declare|drop|update|md5|benchmark) [NC,OR]
RewriteCond %{QUERY_STRING} (localhost|loopback|127\.0\.0\.1) [NC,OR]
RewriteCond %{QUERY_STRING} (<|>|’|%0A|%0D|%27|%3C|%3E|%00) [NC]

# Return 403 Forbidden error.
RewriteRule .* /403.html [F]

RewriteCond %{QUERY_STRING} proc/self/environ [OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
RewriteCond %{QUERY_STRING} base64_(en|de)code[^(]*\([^)]*\) [OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})

## Return 403 Forbidden error.
RewriteRule .* /403.html [F]

RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR]
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]
RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR]
RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR]
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR]
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Windows\-Live\-Social\-Object\-Extractor\-Engine [OR]

RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR]
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR]
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR]
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR]
RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR]
RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR]
RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR]
RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR]
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR]
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR]
RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR]
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]
RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR]
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR]
RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR]
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR]
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR]
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus [OR]
RewriteCond %{HTTP_USER_AGENT} ^PaperLiBot

## Return 403 Forbidden error.
RewriteRule .* /403.html [F]
# Security rules - iporto.com.br (suporte@iporto.com)

fonte http://blog.iporto.com.br/blog/regras-de-seguranca-para-htaccess-apache-linux.php